如何指定通过docker-compose配置创建的用户拥有卷?

时间:2019-04-21 16:42:41

标签: docker permissions docker-compose volume docker-volume

我有以下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 :(得分:0)

据我所知-您不能。我猜您必须创建一个自定义入口点,您可以在其中设置所需的权限。

类似的东西(这是 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} "${@}"

在您的容器中还需要gosu

所以您的 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