linux – 带有’–user’的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图像. user1的id为1000,user2的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设计的这种行为,或者它是一个错误,或者我错过了手册中的内容?

最佳答案 docker的–user参数只更改id而不是docker中的组ID.所以,在码头工具中,我有:

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

它不像原来的系统,我有组= 1000(用户)

因此,一种解决方法可能是将passwd和group文件映射到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为我的问题带来了一些启示.

点赞