Когда я создаю этот образ с помощью 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 команда):
Эта проблема, вероятно, является результатом VOLUME определение внутри вышестоящего файла Dockerfile. Когда том определен в Dockerfile, вы можете добавлять файлы с COPY или ADD вводите команду непосредственно в изображение. Однако, в RUN линия будет:
Создайте временный контейнер, используя определение изображения по состоянию на текущую точку файла dockerfile
В этом временном контейнере будет смонтирован анонимный том от вашего имени или родительский образ, указанный в файле Dockerfile
Анонимный том будет инициализирован из содержимого изображения
Ваша команда будет выполняться внутри контейнера
Если вы перечислите каталог во время этого RUN команда, вы увидите, что ваши изменения были применены, но эти изменения были применены к тому
Когда ваша команда run завершится, docker зафиксирует изменения в контейнере
Эти изменения можно увидеть с помощью docker diff если вы не удалите временные контейнеры (вы можете запустить сборку с --rm=false чтобы они остались)
Эти изменения не будут включать содержимое анонимного тома, поскольку они не существуют внутри файловой системы временного контейнера, тома являются отдельными
Из-за такого поведения у вас есть возможность:
вы можете скопировать свои файлы в другой каталог и изменить там разрешения
вы можете исправить разрешения на своем хосте, чтобы они копировались непосредственно с этими разрешениями
вы можете удалить объем либо из своего изображения, получить исходное изображение, чтобы удалить их определение объема, либо вы можете перестроить свою собственную копию исходного изображения без определения объема и основывать свои изображения на этом
Обратите внимание, что внутри текущих изображений php, похоже, что том был удален, что означает, что у нас фактически есть вариант 3.
Когда я переопределяю этот исполняемый файл с помощью docker-compose volumes, execute разрешение просто похоже на откат - технически отменено на исходное разрешение файла.
Исправление для режима разработки заключается просто в том, чтобы chmod a+x yourfile от хоста, который будет унаследован при монтировании тома compose.
Я вижу дополнительный пробел в вашей последней команде (я нахожусь на своем телефоне, поэтому не могу быть уверен). Поскольку проблема с разрешением, по-видимому, связана с каталогом журнала, измените последнюю строку на: ЗАПУСТИТЕ chmod -R 777 /var/www/html/app/cache /var/www/html/app/logs
Я не могу воспроизвести вашу проблему. Если я использую ваш dockerfile и настрою некоторые фиктивные файлы локально, разрешения будут правильными, и все просто будет работать. Я могу загрузить контейнер и получить доступ к содержимому через веб-браузер. Можете ли вы обновить свой вопрос, включив в него конкретные сообщения об ошибках? Вы уверены, что ваша конфигурация Apache (apache2.conf) не вызывает проблем? Исчезнут ли ошибки, если вы не установите apache2.conf?