docker - Docker 更改作为卷挂载的本地文件的所有者
问题描述
我找不到任何答案,为什么 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
你有什么想法为什么会发生?
解决方案
尝试以下命令,该命令添加--user
docker run选项来控制容器中运行的进程将使用的uid和gid :
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
将获取用户的uidci
getent group ci | cut -d: -f3
会得到组的gidci
推荐阅读
- r - 使用 dplyr 按组查找间隔
- google-analytics - 如何聚合离线数据
- python - Jupyter notebook 无法读取 csv 文件
- wagtail - 如何在 wagtail HTML 模板中使用 routeablepageurl 标签
- windows - 带有 Docker 的 Window 上的 Gitlab
- maven - 有没有办法在插件 MOJO 执行期间获取 Maven 版本?
- c# - 集成 2 个 Web 应用程序(Angular 10、dot net Core 和 Asp.net MVC)
- css - CRA:`react-scripts` 更新从 3 -> 4 中断内联 CSS 样式用法
- qt - 将 qt5 应用程序字体重置为合理的默认值
- amazon-web-services - (AWS) CloudFormation 堆栈与 Amazon Linux 2