linux - 具有 '--user' 的 Docker 无法写入具有不同所有权的卷

标签 linux ubuntu docker

为了让 docker 正常工作,我已经尝试了很多权限组合,但是......首先我的环境:

Ubuntu linux 15.04 和 Docker 版本 1.5.0,构建 a8a31ef。

我有一个目录 '/test/dockervolume' 和用户组中的两个用户 user1 和 user2

chown user1.users /test/dockervolume
chmod 775 /test/dockervolume
ls -la
drwxrwxr-x  2 user1 users 4096 Oct 11 11:57 dockervolume

user1 和 user2 都可以在这个目录下写删除文件。 我使用标准的 docker ubuntu:15.04 图像。用户 1 的 ID 为 1000,用户 2 的 ID 为 1002。

我用下一个命令运行 docker:

docker run -it --volume=/test/dcokervolume:/tmp/job_output --user=1000 --workdir=/tmp/job_output ubuntu:15.04 

在 docker 中,我只做简单的“触摸测试”,它适用于 ID 为 1000 的 user1。当我使用 --user 1002 运行 docker 时,我无法写入该目录:

I have no name!@6c5e03f4b3a3:/tmp/job_output$ touch test2
touch: cannot touch 'test2': Permission denied
I have no name!@6c5e03f4b3a3:/tmp/job_output$ 

需要说明的是,如果不在 docker 中,两个用户都可以写入该目录。

所以我的问题是 docker design 的这种行为,或者这是一个错误,或者我在手册中遗漏了什么?

最佳答案

docker 的 --user 参数仅更改 id 而不是 docker 中的组 id。所以,在一个 docker 中,我有:

id
uid=1002 gid=0(root) groups=0(root)

这不像在我有 groups=1000(users) 的原始系统中

因此,一种解决方法可能是将 passwd 和组文件映射到 docker。

-v /etc/docker/passwd:/etc/passwd:ro -v /etc/docker/group:/etc/group:ro

另一个想法是映射一个由运行 --user 拥有的 tmp 目录,当 docker 的工作完成时将文件复制到最终位置

 TMPFILE=`mktemp`; docker run -v $TMPFILE:/working_dir/ --user=$(id -u); cp $TMPDIR $NEWDIR

本次讨论Understanding user file ownership in docker: how to avoid changing permissions of linked volumes为我的问题带来一些启示。

关于linux - 具有 '--user' 的 Docker 无法写入具有不同所有权的卷,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33067160/

相关文章:

linux - 暂停后台运行的 bash 脚本

linux - Nginx 请求将一个容器重定向到另一个容器

python - 安装 PyOpenCL 时出现问题

ubuntu - 在 Ubuntu 16.04 安装 QGIS 3.0 时出错 - 依赖包

google-chrome - 无法在Docker上安装Google Chrome

Docker 注册表 : Limit access by account to subset of images

linux - 如何使用 unix 命令在文本文件中查找列号

Ubuntu,nginx,RTMP,Twitch - 离线+身份验证时随机播放本地视频文件?

python - 为什么在 Dockerfile 中使用 RUN 安装自定义 python 包不起作用?

linux - shell 脚本中的 for x in {1..10} 仅运行一次