Symfony和Docker - 缓存和日志目录权限

brp*_*paz 5 php file-permissions symfony docker docker-compose

我正在尝试使用docker设置Symfony项目,但总是给出与"cache"目录中的权限相关的错误.

我已经尝试了一切,我似乎无法找到解决方案.问题是以某种方式缓存文件夹是用"root"所有者创建的,即使我的服务器和php-fpm用户设置为www-data.也许是因为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
Run Code Online (Sandbox Code Playgroud)

我的app 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
Run Code Online (Sandbox Code Playgroud)

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"]
Run Code Online (Sandbox Code Playgroud)

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"]
Run Code Online (Sandbox Code Playgroud)

我没有想法.有什么建议?谢谢.

xoc*_*ash 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我认为这会帮助你正确设置它