【问题标题】:Docker changes owner of local files mounted as volumeDocker 更改作为卷挂载的本地文件的所有者
【发布时间】:2019-08-04 15:26:31
【问题描述】:

我在任何地方都找不到答案,为什么 docker 会更改作为卷挂载的文件的所有者。之前docker run

$ ls -la
total 56
drwxrwxr-x 9 ci ci 4096 Mar 13 21:13 .
drwxrwxr-x 4 ci ci 4096 Mar 13 21:12 ..
-rw-rw-r-- 1 ci ci 1108 Mar 13 21:13 application.yml
drwxrwxr-x 5 ci ci 4096 Mar 13 21:13 ci
drwxrwxr-x 5 ci ci 4096 Mar 13 21:13 config
drwxrwxr-x 3 ci ci 4096 Mar 13 21:13 database
-rw-rw-r-- 1 ci ci 2779 Mar 13 21:13 Dockerfile
drwxrwxr-x 3 ci ci 4096 Mar 13 21:13 docker-stuff
drwxrwxr-x 8 ci ci 4096 Mar 13 21:13 .git
-rw-rw-r-- 1 ci ci  137 Mar 13 21:13 .gitignore
-rwxrwxr-x 1 ci ci 6366 Mar 13 21:13 image.sh

docker run之后:

$ ls -la
total 60
drwxrwxr-x 10 administrator administrator 4096 Mar 13 21:15 .
drwxrwxr-x  4 ci            ci            4096 Mar 13 21:12 ..
-rw-rw-r--  1 administrator administrator 1108 Mar 13 21:13 application.yml
drwxrwxr-x  5 administrator administrator 4096 Mar 13 21:13 ci
drwxrwxr-x  5 ci            ci            4096 Mar 13 21:13 config
drwxrwxr-x  3 administrator administrator 4096 Mar 13 21:13 database
-rw-rw-r--  1 administrator administrator 2779 Mar 13 21:13 Dockerfile
drwxrwxr-x  3 administrator administrator 4096 Mar 13 21:13 docker-stuff
drwxrwxr-x  8 administrator administrator 4096 Mar 13 21:13 .git
-rw-rw-r--  1 administrator administrator  137 Mar 13 21:13 .gitignore
-rwxrwxr-x  1 administrator administrator 6366 Mar 13 21:13 image.sh

完整的docker run 命令是:

docker run -d \
             --rm \
             --name "$CONTAINER_NAME" \
             -p "$SHINY_HOST_PORT:3838" \
             -p "$RSTUDIO_HOST_PORT:8787" \
             -v "$DATA_DIR_ON_HOST":"$DATA_DIR_IN_CONTAINER" \
             -v "$CONFIG_DIR_ON_HOST":"$CONFIG_DIR_IN_CONTAINER" \
             -v $(pwd):"/data/" \
             "$DOCKER_IMAGE":"$DOCKER_TAG"

我的用户组是:

$ groups
ci sudo docker administrator

你知道为什么会这样吗?

【问题讨论】:

    标签: docker permissions docker-volume chown owner


    【解决方案1】:

    尝试以下命令,添加 --user docker run option 来控制容器中运行的进程将使用的 uidgid

    docker run -d \
          --rm \
          --name "$CONTAINER_NAME" \
          -p "$SHINY_HOST_PORT:3838" \
          -p "$RSTUDIO_HOST_PORT:8787" \
          -v "$DATA_DIR_ON_HOST":"$DATA_DIR_IN_CONTAINER" \
          -v "$CONFIG_DIR_ON_HOST":"$CONFIG_DIR_IN_CONTAINER" \
          -v $(pwd):"/data/" \
          --user "$(id -u ci):$(getent group ci | cut -d: -f3)" \
          "$DOCKER_IMAGE":"$DOCKER_TAG"
    

    • id -u ci 将获得用户 ciuid
    • getent group ci | cut -d: -f3 将获得组 cigid

    【讨论】:

      【解决方案2】:

      容器中的权限默认以root身份运行,因此每次挂载卷时,权限都会重置为root。参考this 文章。

      【讨论】:

        猜你喜欢
        • 2016-02-04
        • 2021-12-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-10-01
        • 2017-11-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多