Symfony和Docker – caching和日志dirs权限

我试图设置一个Symfony项目使用docker,但总是给与“caching”目录权限相关的错误。

我已经尝试了一切,我似乎无法find一个解决scheme。 问题是不知何故,即使我的服务器和php-fpm用户设置为万维网数据,总是使用“root”所有者创buildcaching文件夹。 也许是因为php-cli用户?

我曾尝试: – setfacl:不要与docker工人 – chown / chmod到www-data:也没有工作。 它可能会在开始时正确地更改所有者,但他们在其他地方发生错误。

泊坞窗,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"] 

我没有想法。 有什么build议么? 谢谢。

我有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 ,我认为这将帮助您正确设置它

我也有这个问题。 没有工作, chownchmodsetfacl 。 然后结束以下解决scheme。 警告 ,我的解决scheme有一些关于读/写的安全问题。 自行承担使用风险!

 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