Как задать пользователя для volume в docker-compose.yml?

Есть docker-compose.yml:
version: '3'
services:
    php:
        volumes:
            - "./web:/var/www/html"

Chown для ./web - root:root, пользователь www-data внутри контейнера не имеет прав на эту папку. Вероятно, нужно создать специального пользователя/группу с правами на эту папку и как-то передать его внутрь контейнера, но я не вижу в описании ключей для docker-compose.yml подходящего.
  • Вопрос задан
  • 14949 просмотров
Пригласить эксперта
Ответы на вопрос 4
@rustler2000
погромист сикраш
Это не вольюм это маунт и права на нем тежи, что и на ./web.
Поставь локально chmod 777 или монтируй /etc/passwd /etc/shadow и кастомайз контейнер, чтоб uid gid с хостом совпадали.
Ответ написан
MaxDukov
@MaxDukov
впишусь в проект как SRE/DevOps.
я в похожем случае в контейнер прокидывал /etc/passwd и /etc/groups
после этого связка имя-uid группа-gid работает.
Ответ написан
Комментировать
@vldud Автор вопроса
Макс, не получается. После прописывания группы и пользователя сервер вообще перестает отвечать. С дописками по Вашей схеме (если, конечно, я ее верно понял) выходит вот так:
version: '3'
services:
    web:
        image: nginx:alpine
        volumes:
            - "./etc/nginx/default.conf:/etc/nginx/conf.d/default.conf"
            - "./etc/ssl:/etc/ssl"
            - "./web:/var/www/html"
            - "./etc/nginx/default.template.conf:/etc/nginx/conf.d/default.template"
            - "/etc/passwd:/etc/passwd"
            - "/etc/groups:/etc/groups"
        ports:
            - "80:80"
            - "3000:443"
        environment:
            - NGINX_HOST=${NGINX_HOST}
        command: /bin/sh -c "envsubst '$$NGINX_HOST' < /etc/nginx/conf.d/default.template > /etc/nginx/conf.d/default.conf && nginx -g 'daemon off;'"
        restart: always
        user: "1001:1001"
        depends_on:
            - php
            - mysqldb
    php:
        build:
            context: .
            dockerfile: DockerfilePhpWithGit
        restart: always
        user: "1001:1001"
        volumes:
            - "./etc/php/php.ini:/usr/local/etc/php/conf.d/php.ini"
            - "./web:/var/www/html"
            - "/etc/passwd:/etc/passwd"
            - "/etc/groups:/etc/groups"

где 1001:1001 - пользователь www-data:www-data. Пользователь с таким же именем и группой создается в сервисе php
Ответ написан
Комментировать
@allter
Я в такой ситуации в entrypoint.sh контейнера модифицировал локальных пользователей, получая uid из прав смонтированного каталога:

SRC_DIR=/path/to/mounted/volume
DIR=/path/to/dir
USER=www-data
GROU=www-data

$uid=$(stat -c '%u' $SRC_DIR)                                                                                                                    
$gid=$(stat -c '%g' $SRC_DIR)                                                                                                                    
echo $uid > /root/uid                                                                                                                          
echo $gid > /root/gid                                                                                                                          
usermod -u $uid $USER                                                                                                                                   
groupmod -g $gid $GROUP                                                                                                                                  
mkdir -p $DIR                                                                                                                                            
chown -R $USER:$GROUP $DIR
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы