Как указать пользовательский том, созданный с помощью конфигурации docker-compose? - PullRequest
1 голос
/ 21 апреля 2019

У меня есть следующее docker-compose.yml

version: '3.7'

services:
  xxx:
    container_name: xxx
    image: xxx
    volumes:
      - config:/some_mountpoint
    user: 1000:1000

volumes:
  config: # <- this volume

Как указать, для какого пользователя будет создан том config, то есть разрешения для точки монтирования?

Без указания этих разрешений /some_mountpoint принадлежит root:root внутри контейнера.

1 Ответ

0 голосов
/ 21 апреля 2019

Насколько я знаю - ты не можешь. Я полагаю, вам нужно создать пользовательскую точку входа, в которой вы можете установить необходимые разрешения.

Что-то в этом роде (это docker-entrypoint.sh ):

#!/bin/bash                                                                                                                                                                                                      

set -e                                                                                                                                                                                                           

user=dev                                                                                                                                                                                                       
user_id=${USER_ID:-1000}                                                                                                                                                                                         

if ! id "${user}" > /dev/null 2>&1; then                                                                                                                                                                         
  useradd -u ${user_id} -m -s /bin/bash ${user} > /dev/null 2>&1                                                                                                                                                 
fi                                                                                                                                                                                                               

mount_path=/some_mountpoint                                                                                                                                                                                 
mount_path_owner=$(ls -ld ${mount_path} | awk '{print $3}')                                                                                                                                                    
if [ "${user}" != "${mount_path_owner}" ]; then                                                                                                                                                                 
  chown -R ${user}:${user} ${mount_path}                                                                                                                                                                        
fi                                                                                                                                                                                                               

exec gosu ${user} "${@}"

Также необходимо Госу в вашем контейнере.

Так что ваш docker-compose.yml может выглядеть так:

version: '3.7'

services:
  xxx:
    entrypoint: ./docker-entrypoint.sh # <- use the custom entrypoint
    container_name: xxx
    image: xxx
    volumes:
      - config:/some_mountpoint

volumes:
  config: # <- this volume
...