为了让 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/