Я создаю образ Docker для своего Symfony
app, и мне нужно дать разрешение серверу apache для записи в кеш и папки журнала
#Dockerfile
FROM php:7-apache
RUN apt-get update \
&& apt-get install -y libicu-dev freetds-common freetds-bin unixodbc \
&& docker-php-ext-install intl mbstring \
&& a2enmod rewrite
COPY app/php.ini /usr/local/etc/php/
COPY app/apache2.conf /etc/apache2/apache2.conf
COPY ./ /var/www/html
RUN find /var/www/html/ -type d -exec chmod 755 {} \;
RUN find /var/www/html/ -type f -exec chmod 644 {} \;
RUN chmod -R 777 /var/www/html/app/cache /var/www/html/app/logs
Когда я создаю этот образ с docker build -t myname/symfony_apps:latest .
и запустите контейнер с docker run -p 8080:80 myname/symfony_apps:latest
. Журнал Apache переполнен ошибками с отказом в разрешении, странная вещь, которую я проверял ls -a
и разрешения в порядке. и когда я запускаю chmod из контейнера bash, проблемы с разрешениями apache исчезают, и приложение работает хорошо
Ситуация
Запуск команд chmod из dockerfile: разрешения изменены, но apache все еще жалуется на отказ в разрешении. Выполнение тех же команд chmod с bash внутри контейнера: разрешения изменены, и мое приложение работает
Любая идея, я что-то упускаю, может быть, мне стоит добавить пользователя root где-нибудь в Dockerfile?
У меня была такая же проблема, и кажется, что в docker или overlay2 есть какая-то ошибка, если содержимое каталога создается на одном уровне, а его разрешения изменены на другом.
В качестве обходного пути вы можете скопировать источники во временный каталог:
COPY . /src
А затем переместите его в /var/www/html
и настроить разрешения (в одном RUN
команда):
RUN rm -rf /var/www/html && mv /src /var/www/html &&\
find /var/www/html/ -type d -exec chmod 755 {} \; &&\
find /var/www/html/ -type f -exec chmod 644 {} \; &&\
chmod -R 777 /var/www/html/app/cache /var/www/html/app/logs
Также я создал Проблема с GitHub.
Попробуйте добавить:
USER root
У меня это сработало.
Оболочка RUN по умолчанию в Docker - это / bin / sh, и именно здесь некорректно установленные разрешения действительно создают проблему.
Но вы можете просто использовать / bin / bash вместо этого, чтобы легко исправить, заметить до и после списка каталогов
Step 7/9 : RUN /bin/bash -c 'ls -la; chmod +x gitlab-properties-builder.sh; ls -la'
---> Running in dc57ae77aa67
drwxr-xr-x. 3 root root 103 Mar 8 17:56 .
drwxr-xr-x. 1 root root 46 Mar 8 17:57 ..
drwxr-xr-x. 2 root root 6 Mar 7 20:47 config
-rw-r--r--. 1 root root 2340 Mar 7 21:20 gitlab-properties-builder.sh
-rw-r--r--. 5 root root 57325770 Mar 5 14:39 gitlab-scm-collector-2.0.5-SNAPSHOT.jar
drwxr-xr-x. 1 root root 42 Mar 8 17:56 .
drwxr-xr-x. 1 root root 61 Mar 8 17:57 ..
drwxr-xr-x. 2 root root 6 Mar 7 20:47 config
-rwxr-xr-x. 1 root root 2340 Mar 7 21:20 gitlab-properties-builder.sh
-rw-r--r--. 5 root root 57325770 Mar 5 14:39 gitlab-scm-collector-2.0.5-SNAPSHOT.jar
---> 8b5de6e348d3
Эта проблема, вероятно, является результатом VOLUME
определение в исходном файле Dockerfile. Когда том определен в Dockerfile, вы можете добавлять файлы с COPY
или ADD
команду прямо в изображение. Однако RUN
линия будет:
RUN
, вы увидите, что ваши изменения применены, но эти изменения были применены к томуdocker diff
если вы не удалите временные контейнеры (вы можете запустить сборку с --rm=false
чтобы они остались)Из-за такого поведения у вас есть возможность:
Обратите внимание, что внутри текущих изображений php кажется, что том был удален, что означает, что у нас фактически есть вариант 3.
Я только что провел эксперимент со следующим:
FROM alpine
LABEL MAINTAINER="YIMGA YIMGA Salathiel Genèse"
RUN apk add --no-cache inotify-tools
CMD [ "./script.sh" ]
WORKDIR /opt/app/
COPY src/ /opt/app/
RUN chmod a+x *.sh
И это просто отлично работает.
Когда я переопределяю этот исполняемый файл с помощью томов docker-compose, execute
Разрешение просто похоже на откат - технически отменяет разрешение исходного файла.
Исправление для режима разработчика просто chmod a+x yourfile
от хоста, который будет унаследован при монтировании тома compose.