Docker Compose: проблема с разрешениями подключенного тома (root:root, несмотря на несколько конфигураций)Php

Кемеровские программисты php общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Docker Compose: проблема с разрешениями подключенного тома (root:root, несмотря на несколько конфигураций)

Сообщение Anonymous »

Вопрос:
У меня возникла проблема с разрешениями в Docker Compose на смонтированном томе, из-за которой я не могу назначить правильные разрешения от хоста контейнеру. Смонтированный каталог всегда приводит к получению разрешений root:root внутри контейнера, несмотря на несколько попыток обеспечить правильное владение. Ниже приведены полные сведения о моей конфигурации и предпринятых попытках.
Контекст:
  • Я работаю в Ubuntu.
  • У меня есть проект Laravel, контейнеризованный с помощью Docker Compose, который включает в себя несколько контейнеров: php, nginx, композитор, node.
  • Мне нужно смонтировать каталог с именем project, который находится на хосте, внутри контейнера php в /var/www/main/project. .
  • Я пытаюсь убедиться, что смонтированный том имеет того же пользователя () и группу (), как и на хосте.
  • Основная проблема заключается в том, что каждый раз при монтировании тома возникают права root:root внутри контейнера, что приводит к ошибки, когда Laravel пытается выполнить запись в этот каталог.
Текущая конфигурация (

Код: Выделить всё

docker-compose.yaml
):

Код: Выделить всё

docker-compose.yaml
services:
php:
build:
context: ./dockerfiles/php
dockerfile: Dockerfile
args:
USER_ID: ${USER_ID}
GROUP_ID: ${GROUP_ID}
user: "${USER_ID}:${GROUP_ID}"
privileged: true
command: |
bash -c "
mkdir -p /var/www/html/storage/logs &&
mkdir -p /var/www/html/storage/framework/{sessions,views,cache} &&
mkdir -p /var/www/html/storage/app/public &&
chown -R ${USER_ID}:${GROUP_ID} /var/www/main/project &&
chmod -R 775 /var/www/html/storage &&
php-fpm
"
volumes:
- ./src:/var/www/html
- laravel_storage:/var/www/html/storage
- laravel_cache:/var/www/html/bootstrap/cache
- ../vb-crs:/var/www/main/project:rw,shared
networks:
- laravel_net
environment:
TMPDIR: /var/www/html/tmp
PHP_IDE_CONFIG: "serverName=Docker"
extra_hosts:
- "host.docker.internal:host-gateway"

volumes:
laravel_storage:
driver: local
laravel_cache:
driver: local

networks:
laravel_net:
driver: bridge
Текущая конфигурация (

Код: Выделить всё

dockerfiles/php/Dockerfile
):

Код: Выделить всё

FROM php:8.2-fpm

RUN apt-get update && apt-get install -y \
libxml2-dev \
&& docker-php-ext-install dom pdo pdo_mysql

RUN pecl install xdebug \
&& docker-php-ext-enable xdebug

COPY ./xdebug.ini /usr/local/etc/php/conf.d/xdebug.ini

# Crea il gruppo e l'utente con i tuoi ID
ARG USER_ID
ARG GROUP_ID

# Usa nomi semplici per il sistema ma mantieni gli ID corretti
RUN groupadd -g ${GROUP_ID} appgroup && \
useradd -u ${USER_ID} -g ${GROUP_ID} -m appuser

# Crea tutte le directory necessarie per Laravel
RUN mkdir -p /var/www/html/storage/framework/sessions \
&& mkdir -p /var/www/html/storage/framework/views \
&& mkdir -p /var/www/html/storage/framework/cache \
&& mkdir -p /var/www/html/storage/logs \
&& mkdir -p /var/www/html/storage/app/public \
&& mkdir -p /var/www/html/bootstrap/cache \
&& chown -R appuser:appgroup /var/www/html \
&& chmod -R 775 /var/www/html

# Configura PHP-FPM
RUN sed -i "s/user = www-data/user = appuser/g" /usr/local/etc/php-fpm.d/www.conf && \
sed -i "s/group = www-data/group = appgroup/g" /usr/local/etc/php-fpm.d/www.conf

USER appuser

WORKDIR /var/www/html
Проблема:
Несмотря на различные попытки, когда я вхожу в контейнер с помощью docker-compose exec php bash и проверяю разрешения с помощью ls -la /var/www/main/project, я всегда вижу root:root как владельца смонтированного каталога. Это приводит к ошибке, когда Laravel пытается создать файлы или каталоги по этому пути.
Пример ошибки:

Код: Выделить всё

Failed to create router structure: file_put_contents(/var/www/main/project/home/web/[redacted]/router/chain/[redacted]/test.php): Failed to open stream: No such file or directory
Сделанные попытки:
  • Запустите контейнер с теми же UID и GID, что и у хоста. :
    • Я использовал файл .env для передачи значений USER_ID и GROUP_ID.< /li>
      Добавлен пользователь: "${USER_ID}:${GROUP_ID}" в docker-compose.yaml.
    • Передан USER_ID и GROUP_ID как создайте аргументы в файле Dockerfile, чтобы создать пользователя с этими идентификаторами.
    • Результат: разрешения тома проекта по-прежнему остаются root:root.
  • Использовать флаг привилегий:
    • Я добавил привилегированный: true в контейнер PHP, чтобы гарантировать, что контейнер имеет root-доступ и может изменять разрешения подключенного тома.
    • Результат: без изменений. Разрешения остаются root:root.
  • Команда при запуске контейнера[/b]:
    • В команде запуска (), я добавил chown -R ${USER_ID}:${GROUP_ID} /var/www/main/project, чтобы изменить разрешения смонтированного тома сразу после запуска контейнера.
    • Результат: снова права root:root.
  • Распространение монтирования ()[/b]:
    • Я попробовал добавить :rw,shared к смонтированному тому, чтобы гарантировать распространение изменений разрешений. между хостом и контейнером.
    • Результат: разрешения не изменились.
  • Дополнительные проверки:
    • Я запустил ls -la как на хосте, так и внутри контейнера, подтвердив, что каталог на хосте имеет правильный адрес[email protected]:domainusers@zg .local пользователь и группа.
Вопрос:
Как убедиться, что смонтированный том ../project имеет правильные права пользователя и группы внутри контейнера Docker? Есть ли что-то, чего мне не хватает в текущей конфигурации? Или есть другой подход, который я мог бы попробовать решить эту проблему с разрешениями?
Заранее благодарим вас за любые предложения!

Подробнее здесь: https://stackoverflow.com/questions/791 ... ltiple-con
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Проблема с разрешениями Laravel Sail Docker: файлы, созданные с неправильным владельцем и разрешениями
    Anonymous » » в форуме Linux
    0 Ответы
    40 Просмотры
    Последнее сообщение Anonymous
  • Я случайно запустил «chown root:root -R /», тома докера сломаны
    Anonymous » » в форуме Linux
    0 Ответы
    13 Просмотры
    Последнее сообщение Anonymous
  • Приложение Docker не может записывать тома при развертывании на EC2 Amazon Linux
    Anonymous » » в форуме Linux
    0 Ответы
    28 Просмотры
    Последнее сообщение Anonymous
  • Контейнеры Docker не используют тома
    Anonymous » » в форуме Php
    0 Ответы
    31 Просмотры
    Последнее сообщение Anonymous
  • Тома Docker и разрешения Apache
    Anonymous » » в форуме Php
    0 Ответы
    6 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Php»