Symfony 和 Docker - 缓存和日志目录权限
Posted
技术标签:
【中文标题】Symfony 和 Docker - 缓存和日志目录权限【英文标题】:Symfony and Docker - Cache and Log dirs permissions 【发布时间】:2016-05-09 05:25:12 【问题描述】:我正在尝试使用 docker 设置 Symfony 项目,但它总是返回与“缓存”目录中的权限相关的错误。
我已经尝试了所有方法,但似乎找不到解决方案。 问题是,即使我的服务器和 php-fpm 用户设置为 www-data,缓存文件夹总是由“root”所有者创建。也许是因为 php-cli 用户?
我尝试过: - setfacl : 不要使用 docker - chown / chmod 到 www-data:也没有工作。它可能会在开始时正确更改所有者,但在其他地方会出错。
docker-compose.yml
app:
build: .
command: "tail -f /dev/null" # keep the application container running
links:
- mysql
volumes:
- .:/var/www
nginx:
build: docker/nginx/
ports:
- 8090:80
links:
- php-fpm
volumes_from:
- app
php-fpm:
build: docker/fpm
ports:
- 9000:9000
volumes_from:
- app
mysql:
image: mysql:5.7
volumes:
- ./docker/data/mysql:/var/lib/mysql
我的应用 Dockerfile:
FROM php:5.6-cli
ENV DEBIAN_FRONTEND noninteractive
RUN apt-get update && apt-get install -y \
git \
vim \
curl \
php5-json \
php5-intl \
php5-mcrypt \
php5-mysql \
php5-apcu \
php5-gd
ADD /docker/fpm/php.ini /usr/local/etc/php/
# install composer.
RUN curl -sS https://getcomposer.org/installer | php
RUN mv composer.phar /usr/local/bin/composer
RUN usermod -u 1000 www-data
ADD . /var/www
WORKDIR /var/www
PHP-fpm Dockerfile
FROM php:5.6-fpm
ENV DEBIAN_FRONTEND noninteractive
RUN apt-get update && apt-get install -y \
php5-json \
php5-intl \
php5-mcrypt \
php5-mysql \
php5-apcu \
php5-gd
RUN apt-get install -y php5-xdebug
ADD xdebug.ini /usr/local/etc/php/conf.d/
ADD php.ini /usr/local/etc/php/
EXPOSE 9000
WORKDIR /var/www
CMD ["php-fpm"]
Nginx Dockerfile
FROM nginx:latest
ENV DEBIAN_FRONTEND noninteractive
RUN apt-get update && apt-get install -y git vim
ADD nginx.conf /etc/nginx/
ADD symfony.conf /etc/nginx/sites-available/
RUN mkdir -p /etc/nginx/sites-enabled
RUN ln -s /etc/nginx/sites-available/symfony.conf /etc/nginx/sites-enabled/
RUN usermod -u 1000 www-data
EXPOSE 80
EXPOSE 443
ENTRYPOINT ["nginx"]
我没有想法。有什么建议? 谢谢。
【问题讨论】:
在你的 Dockerfile 中添加一个非特权用户和一个USER xxx
这适用于我们在 mac/windows/ubuntu ***.com/questions/34949083/…
【参考方案1】:
我有一个带有 docker 的 apache 2.2 设置,在 Dockerfile 的末尾我有以下命令:
ENTRYPOINT service apache2 start && sh /opt/fix_symfony_cache_and_logs_permissions.sh
这在 fix_symfony_cache_and_logs_permissions 脚本中:
rm -rf /route_to_app/app/cache/* /route_to_app/app/logs/*
tailf /dev/null
您的问题似乎与您的 php-fpm 进程应该以正确的权限运行这一事实有关。
编辑:我刚刚发现了这个https://github.com/drgomesp/symfony-docker,我认为它可以帮助您正确设置它
【讨论】:
github.com/drgomesp/symfony-docker/blob/master/.docker/php/… 上的第 52 行完成了编辑中所述的技巧。【参考方案2】:我也有这个问题。没有任何效果,chown
、chmod
、setfacl
。然后以以下解决方案结束。 警告,我的解决方案在读/写方面存在一些安全问题。使用它需要您自担风险!
FROM php:5.6.29-apache
RUN apt-get update \
&& apt-get install -y git libssl-dev zlib1g-dev libicu-dev g++ \
&& docker-php-ext-install intl mbstring zip \
&& a2enmod rewrite
RUN pecl install mongo \
&& echo extension=mongo.so > /usr/local/etc/php/conf.d/mongo.ini \
&& docker-php-ext-enable mongo \
&& pecl install mongodb && \
docker-php-ext-enable mongodb
COPY apache2.conf /etc/apache2/apache2.conf
COPY . /var/www/html
WORKDIR /var/www/html
RUN rm -rf /var/www/html/var/cache/prod \
&& rm -rf /var/www/html/var/cache/dev
RUN chown -R www-data /var/www
RUN chmod -R 777 /var/www
USER www-data
RUN curl -sS https://getcomposer.org/installer | php
RUN php composer.phar install --no-interaction --optimize-autoloader
USER root
而apache2.conf文件内容如下。
User www-data
Group www-data
ErrorLog /proc/self/fd/2
IncludeOptional mods-enabled/*.load
IncludeOptional mods-enabled/*.conf
Listen 80
DocumentRoot /var/www/html/web
<Directory /var/www/html/web>
AllowOverride None
Order Allow,Deny
Allow from All
<IfModule mod_rewrite.c>
Options -MultiViews
RewriteEngine On
RewriteCond %REQUEST_FILENAME !-f
RewriteRule ^(.*)$ app.php [QSA,L]
</IfModule>
</Directory>
AccessFileName .htaccess
<FilesMatch "^\.ht">
Require all denied
</FilesMatch>
<FilesMatch \.php$>
SetHandler application/x-httpd-php
</FilesMatch>
DirectoryIndex disabled
DirectoryIndex app.php
【讨论】:
以上是关于Symfony 和 Docker - 缓存和日志目录权限的主要内容,如果未能解决你的问题,请参考以下文章
.NET CORE开源 DDD微服务 支持 多租户 单点登录 多级缓存自动任务分布式日志授权和鉴权 网关 注册与发现 系统架构 docker部署