В Docker, файлы не доступны апачу

Говорим о серверах, развёртывании, нагрузках, выборе и использовании разных технологий и продуктов
Ответить
Аватара пользователя
maleks
Сообщения: 1992
Зарегистрирован: 2012.12.26, 12:56

В Docker, файлы не доступны апачу

Сообщение maleks »

Привет.
Делаю так чтобы проект(yii2-basic) можно было запустить одной командой - docker compose up -d.
Это не для разработки, поэтому копирую туда все файлы.
Но хотелось бы чтобы каталог web/uploads был среди volumes, один такой доступный снаружи.
docker-compose.yml

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

version: '2'
services:
  php:
    build: .
    volumes:
      - ./web/uploads:/app/web/uploads:delegated
    ports:
      - '8000:80'
Dockerfile

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

FROM yiisoftware/yii2-php:8.1-apache
COPY . /app
WORKDIR /app
RUN composer install
RUN chown -R www-data:www-data /app
Когда все это запускаешь апач внутри ( www-data) не может читать каталог /app/web/uploads ,т.к. на нем владелец и группа (1000:1000) из хоста, после монтирования. Как это исправить?
Спасибо.
Аватара пользователя
maleks
Сообщения: 1992
Зарегистрирован: 2012.12.26, 12:56

Re: В Docker, файлы не доступны апачу

Сообщение maleks »

Если такую строчку добавить в Dockerfile

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

RUN chmod o+w /app/web/uploads && chmod o+w /app/web/uploads/result
почему то это не дает эффекта.

А вот если эти права снаружи выставить(т.к. после клонирования с гитхаба их нет), то станет работать.
Но хотелось бы одной командой запускать
Аватара пользователя
SiZE
Сообщения: 2817
Зарегистрирован: 2011.09.21, 12:39
Откуда: Perm
Контактная информация:

Re: В Docker, файлы не доступны апачу

Сообщение SiZE »

1000 - это обычно первый юзер после установки. По хорошему, надо дать права на чтение|изменение группе и поменять группу на www-data
Аватара пользователя
maleks
Сообщения: 1992
Зарегистрирован: 2012.12.26, 12:56

Re: В Docker, файлы не доступны апачу

Сообщение maleks »

Я уже понял что из образа это делать не верно, т.к. монтирование идет позже.
Добавлю в инструкцию что надо снаружи права проставить, думал одной командой, но увы.

В принципе в yii та же петрушка, как по докам не запустился чистый проект на докере пока снаружи не подшаманил права, видно это обычные траблы таких вещей
Аватара пользователя
SiZE
Сообщения: 2817
Зарегистрирован: 2011.09.21, 12:39
Откуда: Perm
Контактная информация:

Re: В Docker, файлы не доступны апачу

Сообщение SiZE »

Я когда-то для себя нашел удобный способ и делаю так для разработки.

Смотрю в WSL у своего пользователя UID

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

$ echo $UID
1000
В docker-compose.yml пробрасываю аргументы для создания пользователя с таким же UID (можно в .env естественно)

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

  php:
    build:
      args:
        user: sammy
        uid: 1000
      context: ./
      dockerfile: ./php/Dockerfile
В ./php/Dockerfile читаются аргументы, создается пользователь и добавляется в группы www-data и root

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

FROM php

# Аргументы из docker-compose.yml
ARG user
ARG uid

# Здесь ставим php и все остальное делаем

# А здесь добавляем пользователя
RUN useradd -G www-data,root -u $uid -d /home/$user $user
RUN mkdir -p /home/$user/.composer && \
    chown -R $user:$user /home/$user
    
USER $user
Далее если мы создаем какой-то файл в WSL UID будет ссылаться на нашего пользователя, а в контейнере на sammy. И все хорошо работает.

Ключевая история состоит еще в инструкции USER $user, которая указывает на запуск контейнера из под не рутового пользователя. Её необходимо указывает в самом конце, чтобы остальные инструкции выполнились от рута
Аватара пользователя
maleks
Сообщения: 1992
Зарегистрирован: 2012.12.26, 12:56

Re: В Docker, файлы не доступны апачу

Сообщение maleks »

Интересно, есть проект , который расшаривается между командой.
И в нем докер файлы.
Подразумевается же, что каждый себе, после того как заберет проект, сможет запустить его именно на этих докер файлах что в репозитории.

А тут получается, что надо под себя править докер файлы, это ж надо шарить в докере поболее обычного, и в какой то своей локальной ветке тюнить.
Аватара пользователя
maleks
Сообщения: 1992
Зарегистрирован: 2012.12.26, 12:56

Re: В Docker, файлы не доступны апачу

Сообщение maleks »

Как Вы я делал подобное, группу с хоста пробрасывал, чтобы апач в эту группу добавить, но опять же - подделывание под себя
Аватара пользователя
SiZE
Сообщения: 2817
Зарегистрирован: 2011.09.21, 12:39
Откуда: Perm
Контактная информация:

Re: В Docker, файлы не доступны апачу

Сообщение SiZE »

maleks писал(а): 2024.04.08, 10:35 А тут получается, что надо под себя править докер файлы
Достаточно вынести в .env

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

PHP_USER=sammy
PHP_UID=1000
docker-compose.yml

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

  php:
    build:
      args:
        # Можно даже значения по умолчанию оставить root (#0), 
        # но тогда надо допилить Dockerfile проверкой, что такой пользователь не существует
        user: ${PHP_USER:-root}
        uid: ${PHP_UID:-0}
      context: ./
      dockerfile: ./php/Dockerfile
Аватара пользователя
maleks
Сообщения: 1992
Зарегистрирован: 2012.12.26, 12:56

Re: В Docker, файлы не доступны апачу

Сообщение maleks »

Подумаю, спасибо
Ответить