Вопрос:
У меня возникла проблема с разрешениями в Docker Compose на смонтированном томе, из-за которой я не могу назначить правильные разрешения от хоста контейнеру. Смонтированный каталог всегда приводит к получению разрешений root:root внутри контейнера, несмотря на несколько попыток обеспечить правильное владение. Ниже приведены полные сведения о моей конфигурации и предпринятых попытках.
Контекст:
Я работаю в Ubuntu.
У меня есть проект Laravel, контейнеризованный с помощью Docker Compose, который включает в себя несколько контейнеров: php, nginx, композитор, node.
Мне нужно смонтировать каталог с именем project, который находится на хосте, внутри контейнера php в /var/www/main/project. .
Я пытаюсь убедиться, что смонтированный том имеет того же пользователя (
Основная проблема заключается в том, что каждый раз при монтировании тома возникают права root:root внутри контейнера, что приводит к ошибки, когда Laravel пытается выполнить запись в этот каталог.
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.
Я попробовал добавить :rw,shared к смонтированному тому, чтобы гарантировать распространение изменений разрешений. между хостом и контейнером.
Результат: разрешения не изменились.
Дополнительные проверки:
Я запустил ls -la как на хосте, так и внутри контейнера, подтвердив, что каталог на хосте имеет правильный адрес[email protected]:domainusers@zg .local пользователь и группа.
Вопрос:
Как убедиться, что смонтированный том ../project имеет правильные права пользователя и группы внутри контейнера Docker? Есть ли что-то, чего мне не хватает в текущей конфигурации? Или есть другой подход, который я мог бы попробовать решить эту проблему с разрешениями?
Заранее благодарим вас за любые предложения!
[b]Вопрос:[/b] У меня возникла проблема с разрешениями в Docker Compose на смонтированном томе, из-за которой я не могу назначить правильные разрешения от хоста контейнеру. Смонтированный каталог всегда приводит к получению разрешений root:root внутри контейнера, несмотря на несколько попыток обеспечить правильное владение. Ниже приведены полные сведения о моей конфигурации и предпринятых попытках. Контекст: [list] [*]Я работаю в Ubuntu. [*]У меня есть проект Laravel, контейнеризованный с помощью Docker Compose, который включает в себя несколько контейнеров: php, nginx, композитор, node. [*]Мне нужно смонтировать каталог с именем project, который находится на хосте, внутри контейнера php в /var/www/main/project. . [*]Я пытаюсь убедиться, что смонтированный том имеет того же пользователя ([code][email protected][/code]) и группу ([code]domain [email protected][/code]), как и на хосте. [*]Основная проблема заключается в том, что каждый раз при монтировании тома возникают права root:root внутри контейнера, что приводит к ошибки, когда Laravel пытается выполнить запись в этот каталог. [/list] Текущая конфигурация ([code]docker-compose.yaml[/code]): [code]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
# 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
# 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 [/code] Проблема: Несмотря на различные попытки, когда я вхожу в контейнер с помощью docker-compose exec php bash и проверяю разрешения с помощью ls -la /var/www/main/project, я всегда вижу root:root как владельца смонтированного каталога. Это приводит к ошибке, когда Laravel пытается создать файлы или каталоги по этому пути. Пример ошибки: [code]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 [/code] Сделанные попытки: [list] [*][b]Запустите контейнер с теми же UID и GID, что и у хоста. [/b]: [list] Я использовал файл .env для передачи значений USER_ID и GROUP_ID.< /li> Добавлен пользователь: "${USER_ID}:${GROUP_ID}" в docker-compose.yaml. [*]Передан USER_ID и GROUP_ID как создайте аргументы в файле Dockerfile, чтобы создать пользователя с этими идентификаторами. [*][b]Результат[/b]: разрешения тома проекта по-прежнему остаются root:root. [/list]
[*][b]Использовать флаг привилегий[/b]: [list] Я добавил привилегированный: true в контейнер PHP, чтобы гарантировать, что контейнер имеет root-доступ и может изменять разрешения подключенного тома. [*][b] Результат[/b]: без изменений. Разрешения остаются root:root. [/list]
[*][b][code]chown[/code] Команда при запуске контейнера[/b]: [list] В команде запуска ([code]command[/code]), я добавил chown -R ${USER_ID}:${GROUP_ID} /var/www/main/project, чтобы изменить разрешения смонтированного тома сразу после запуска контейнера. [*][b]Результат[/b]: снова права root:root. [/list]
[*][b]Распространение монтирования ([code]:shared[/code])[/b]: [list] Я попробовал добавить :rw,shared к смонтированному тому, чтобы гарантировать распространение изменений разрешений. между хостом и контейнером. [*][b]Результат[/b]: разрешения не изменились. [/list]
[*][b]Дополнительные проверки[/b]: [list] Я запустил ls -la как на хосте, так и внутри контейнера, подтвердив, что каталог на хосте имеет правильный адрес[email protected]:domainusers@zg .local пользователь и группа. [/list]
[/list] Вопрос: Как убедиться, что смонтированный том ../project имеет правильные права пользователя и группы внутри контейнера Docker? Есть ли что-то, чего мне не хватает в текущей конфигурации? Или есть другой подход, который я мог бы попробовать решить эту проблему с разрешениями? Заранее благодарим вас за любые предложения!
У меня постоянные проблемы с разрешениями при запуске моего приложения Laravel в контейнере Docker с использованием Laravel Sail. Несмотря на то, что я пробовал различные решения, мне не удалось полностью решить проблему.
Окружающая среда...
Я случайно выполнил следующую команду на своем сервере Linux (пропустил нажатие кнопки ввода вместо удаления), я остановил команду примерно через 500 мс / 1 с:
chown root:root -R /
С тех пор мои контейнеры Docker, использующие PostgreSQL и...
На моем компьютере с Windows на рабочем столе Docker приложение может записывать данные в свои тома.
В ec2 amazon linux я создаю контейнеры с помощью docker-compose up
они работают нормально, но при попытке записать файл на том ему отказывают в...
Мне кажется, я не понимаю, как работают тома Docker. У меня есть файл компоновки докера со службой приложений, на которой работает приложение laravel, служба postgres и служба memcached. Я назвал тома для хранилища laravel и для postgres, но на этих...
Я использую Docker для обслуживания огромного веб-сайта на PHP. Проблема в том, что когда я связываю том хоста с контейнером, я получаю ошибки разрешений. Я знаю, что могу запустить chmod -R 777 /var/www, но не опасно ли это?