TransWikia.com

Не срабатывают права в Dockerfile

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 они не срабатывают. Но если зайти в сам контейнер и вручную прописываю права, то все ок. Подскажите, пожалуйста, в чем может быть проблема

One Answer

Эти команды не срабатывают, потому что они запускаются в файловой системе контейнера, во время сборке образа, т.е. до того, как подключается volume в /var/www/html. Это происходит уже во время выполения docker run и там уже подключен новый volume c правами и владельцами с хоста.

Решить можно добавив скрипт, который сначала установит правильные права и потом запустит ту команду, которой вы собственно запускаете приложение в контейнере. Этот скрипт нужно указать в CMD в Dockerfile.

Answered by Roman Konoval on December 7, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP