Stack Overflow на русском Asked on December 7, 2021
Есть приложение Laravel на докер контейнерах. Файл docker-compose:
version: "3.5"
services:
nginx:
image: nginx:latest
ports:
- 127.0.0.1:89:80
volumes:
- .:/var/www/html
- ./docker/config/nginx:/etc/nginx/conf.d
links:
- php-fpm
php-fpm:
build:
context: ./docker/php-fpm
volumes:
- .:/var/www/html
И Dockerfile:
FROM php:7.3-fpm
#COPY . /var/www/html
RUN apt-get update
&& docker-php-ext-install pdo pdo_mysql
&& chown -R www-data:www-data /var/www
&& chmod -R 777 /var/www/html
После запуска приложения пишет:
The stream or file "/var/www/html/storage/logs/laravel.log" could not be opened: failed to open stream: Permission denied
. Т.е права, которые я задаю в Dockerfile chown -R www-data:www-data /var/www
они не срабатывают. Но если зайти в сам контейнер и вручную прописываю права, то все ок. Подскажите, пожалуйста, в чем может быть проблема
Эти команды не срабатывают, потому что они запускаются в файловой системе контейнера, во время сборке образа, т.е. до того, как подключается volume в /var/www/html
. Это происходит уже во время выполения docker run
и там уже подключен новый volume
c правами и владельцами с хоста.
Решить можно добавив скрипт, который сначала установит правильные права и потом запустит ту команду, которой вы собственно запускаете приложение в контейнере. Этот скрипт нужно указать в CMD
в Dockerfile
.
Answered by Roman Konoval on December 7, 2021
Get help from others!
Recent Answers
Recent Questions
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP