2016-01-31 2 views
4

Я пытаюсь настроить проект Symfony с помощью докеры, но все эти ошибки связаны с разрешениями в каталоге «cache».Symfony and Docker - Разрешения для кеша и журнала dars

Я пробовал все, и я не могу найти решение. Проблема в том, что папка кэша всегда создана с владельцем «root», даже с моим сервером и пользователем php-fpm, установленным как www-data. Может быть, из-за пользователя php-cli?

Я пробовал: - setfacl: Не работает с докером - chown/chmod to 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"] 

Я из идей. Какие-либо предложения? Спасибо.

+1

добавить в своем Dockerfile в непривилегированных пользователей и 'USER xxx' – user2915097

+0

это работало для нас на Mac/Windows/Ubuntu http://stackoverflow.com/questions/34949083/symfony-docker-permission-problems- для-кэш-файлов/36493746 # 36493746 –

ответ

0

У меня есть 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-процесс - это тот, кто должен работать с правильными разрешениями.

EDIT: Я только что узнал об этом https://github.com/drgomesp/symfony-docker который я думаю, поможет вам настроить его правильно

-1

Я также имел эту проблему. Ничего не работало, 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 

 Смежные вопросы

  • Нет связанных вопросов^_^