我已经玩了很多任何组合使得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为我的问题带来了一些启示.