And*_*hov 5 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
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
在 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$
Run Code Online (Sandbox Code Playgroud)
只是要清楚,如果不在 docker 中,两个用户都可以写入该目录。
所以我的问题是 docker 设计的这种行为,还是一个错误,或者我错过了手册中的某些内容?
docker 的 --user 参数更改的只是 id,而不是 docker 内的组 ID。所以,在码头工人中我有:
id
uid=1002 gid=0(root) groups=0(root)
Run Code Online (Sandbox Code Playgroud)
它不像在原始系统中我有 groups=1000(users)
因此,一种解决方法可能是将 passwd 和组文件映射到 docker。
-v /etc/docker/passwd:/etc/passwd:ro -v /etc/docker/group:/etc/group:ro
Run Code Online (Sandbox Code Playgroud)
另一个想法是映射运行 --user 拥有的 tmp 目录,当 docker 的工作完成时将文件复制到最终位置
TMPFILE=`mktemp`; docker run -v $TMPFILE:/working_dir/ --user=$(id -u); cp $TMPDIR $NEWDIR
Run Code Online (Sandbox Code Playgroud)
此讨论理解 docker 中的用户文件所有权:如何避免更改链接卷的权限为我的问题带来了一些线索。
| 归档时间: |
|
| 查看次数: |
3022 次 |
| 最近记录: |