英文:
Laravel docker image unable to change permission to /var/www/storage/logs/ always is root owner
问题
I have the next Dockerfile:
FROM php:8.1.0-fpm
# 设置工作目录
WORKDIR /var/www
# 添加 Docker PHP 扩展仓库
ADD https://github.com/mlocati/docker-php-extension-installer/releases/latest/download/install-php-extensions /usr/local/bin/
# 安装 PHP 扩展
RUN chmod +x /usr/local/bin/install-php-extensions && sync && \
install-php-extensions mbstring pdo_mysql zip exif pcntl gd memcached
# 安装依赖
RUN apt-get update && apt-get install -y \
build-essential \
libpng-dev \
libjpeg62-turbo-dev \
libfreetype6-dev \
locales \
zip \
jpegoptim optipng pngquant gifsicle \
unzip \
git \
curl \
lua-zlib-dev \
libmemcached-dev \
nginx
# 安装 Supervisor
RUN apt-get install -y supervisor
# 安装 Composer
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
# 清除缓存
RUN apt-get clean && rm -rf /var/lib/apt/lists/*
# 为 Laravel 应用程序添加用户
RUN groupadd -g 1000 www
RUN useradd -u 1000 -ms /bin/bash -g www www
# 将代码复制到 /var/www
COPY --chown=www:www-data . /var/www
# 将 root 添加到 www 组
RUN chmod -R ug+w /var/www/storage
# 复制 Nginx/PHP/Supervisor 配置
RUN cp docker/supervisor.conf /etc/supervisord.conf
RUN cp docker/php.ini /usr/local/etc/php/conf.d/app.ini
RUN cp docker/nginx.conf /etc/nginx/sites-enabled/default
# PHP 错误日志文件
RUN mkdir /var/log/php
RUN touch /var/log/php/errors.log && chmod 777 /var/log/php/errors.log
# 部署步骤
RUN composer update
RUN composer install --optimize-autoloader --no-dev
RUN chmod +x /var/www/docker/run.sh
EXPOSE 80
ENTRYPOINT ["/var/www/docker/run.sh"]
and this is always adding root permission to the /var/www/storage/logs directory.
Here all seems to be ok, but when I did ls -l !Surprise! the logs/laravel.log file has root permission:
And when I tried do login by using postman here is the error:
<!-- The stream or file "/var/www/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied
The exception occurred while attempting to log: The stream or file "/var/www/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied
I don't know what to do to prevent this problem guys, if you have any idea to fix this problem I will appreciate it.
I have tried to add it:
sudo chmod -R ugo+rw storage
But the logs/laravel.log file always has root permission. Why happens it?
thanks so much.
英文:
I have the next Dockerfile:
FROM php:8.1.0-fpm
# Set working directory
WORKDIR /var/www
# Add docker php ext repo
ADD https://github.com/mlocati/docker-php-extension-installer/releases/latest/download/install-php-extensions /usr/local/bin/
# Install php extensions
RUN chmod +x /usr/local/bin/install-php-extensions && sync && \
install-php-extensions mbstring pdo_mysql zip exif pcntl gd memcached
# Install dependencies
RUN apt-get update && apt-get install -y \
build-essential \
libpng-dev \
libjpeg62-turbo-dev \
libfreetype6-dev \
locales \
zip \
jpegoptim optipng pngquant gifsicle \
unzip \
git \
curl \
lua-zlib-dev \
libmemcached-dev \
nginx
# Install supervisor
RUN apt-get install -y supervisor
# Install composer
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
# Clear cache
RUN apt-get clean && rm -rf /var/lib/apt/lists/*
# Add user for laravel application
RUN groupadd -g 1000 www
RUN useradd -u 1000 -ms /bin/bash -g www www
# Copy code to /var/www
COPY --chown=www:www-data . /var/www
# add root to www group
RUN chmod -R ug+w /var/www/storage
# Copy nginx/php/supervisor configs
RUN cp docker/supervisor.conf /etc/supervisord.conf
RUN cp docker/php.ini /usr/local/etc/php/conf.d/app.ini
RUN cp docker/nginx.conf /etc/nginx/sites-enabled/default
# PHP Error Log Files
RUN mkdir /var/log/php
RUN touch /var/log/php/errors.log && chmod 777 /var/log/php/errors.log
# Deployment steps
RUN composer update
RUN composer install --optimize-autoloader --no-dev
RUN chmod +x /var/www/docker/run.sh
EXPOSE 80
ENTRYPOINT ["/var/www/docker/run.sh"]
and this is always adding root permission to the /var/www/storage/logs directory.
Here all seems to be ok, but when I did ls -l !Surprise! the logs/laravel.log file has root permission:
And when I tried do login by using postman here is the error:
<!-- The stream or file &quot;/var/www/storage/logs/laravel.log&quot; could not be opened in append mode: Failed to open stream: Permission denied
The exception occurred while attempting to log: The stream or file &quot;/var/www/storage/logs/laravel.log&quot; could not be opened in append mode: Failed to open stream: Permission denied
I don't know what to do to prevent this problem guys, if you have any idea to fix this problem I will appreciate it.
I have tried to add it:
sudo chmod -R ugo+rw storage
But the logs/laravel.log file always has root permission. Why happens it?
thanks so much.
答案1
得分: 2
USER www
RUN composer update
RUN composer install --optimize-autoloader --no-dev
RUN chmod +x /var/www/docker/run.sh
英文:
Seems like you forgot to change user to www
before starting the app, and Laravel is creating all files under root
# Here it goes
USER www
# Deployment steps
RUN composer update
RUN composer install --optimize-autoloader --no-dev
RUN chmod +x /var/www/docker/run.sh
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论