【问题标题】:How to specify user owning volume created via docker-compose configuration?如何指定通过 docker-compose 配置创建的用户拥有卷?
【发布时间】:2019-09-11 01:45:12
【问题描述】:

我有以下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 所有。

【问题讨论】:

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


    【解决方案1】:

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

    类似的东西(这是 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
    

    【讨论】:

    猜你喜欢
    • 2023-03-16
    • 2016-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-08
    • 1970-01-01
    • 2020-05-25
    • 2023-03-14
    相关资源
    最近更新 更多