如何正确运行Docker容器作为具有相同组的特定主机用户?

我的目标是使用任意用户ID(使用-u标志docker run )在容器中执行命令,并使容器环境“相信”执行用户具有相同的组成员关系主机。

组的成员资格很重要,因为我希望能够在这个容器内执行docker命令(无需在容器中作为root运行,或者使用sudo docker run在容器中sudo docker run )。

我想,我可以使用下面的docker run标志从主机映射一堆用户相关的资源到容器中:

-v /etc/passwd:/etc/passwd:ro -v /etc/group:/etc/group:ro -v /etc/shadow:/etc/shadow:ro -v /etc/sudoers:/etc/sudoers:ro -v /var/run/docker.sock:/var/run/docker.sock -u $(id -u):$(id -g)

所以如果在主机上,我可以这样做:

 >id uid=1011(itamar) gid=1011(itamar) groups=1011(itamar),27(sudo),999(docker) >docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES cf82090e3c59 343ffac52c3e "bash" 9 hours ago Up 9 hours suspicious_swirles ... 

我有一个图像与docker安装,所以当以root身份运行时,我可以这样做:

 >docker run -it --rm -v /var/run/docker.sock:/var/run/docker.sock foo-image id uid=0(root) gid=0(root) groups=0(root) >docker run -it --rm -v /var/run/docker.sock:/var/run/docker.sock foo-image docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 69b0117a80ca foo-image "docker ps" Less than a second ago Up Less than a second awesome_wright3 cf82090e3c59 sha256:343ffac52c3e717dd9a4ed03d172505ee457f1fdc3b86decc77b6a51b8ef119b "bash" 9 hours ago Up 9 hours suspicious_swirles ... 

那么我希望类似的行为与“用户模拟”标志,但相反,我没有看到在容器中,导致docker命令没有sudo失败的组成员身份:

 >docker run -it --rm -v /etc/passwd:/etc/passwd:ro -v /etc/group:/etc/group:ro -v /etc/shadow:/etc/shadow:ro -v /etc/sudoers:/etc/sudoers:ro -v /var/run/docker.sock:/var/run/docker.sock -u $(id -u):$(id -g) foo-image id uid=1011(itamar) gid=1011(itamar) groups=1011(itamar) >docker run -it --rm -v /etc/passwd:/etc/passwd:ro -v /etc/group:/etc/group:ro -v /etc/shadow:/etc/shadow:ro -v /etc/sudoers:/etc/sudoers:ro -v /var/run/docker.sock:/var/run/docker.sock -u $(id -u):$(id -g) foo-image docker ps FATA[0000] Get http:///var/run/docker.sock/v1.18/containers/json: dial unix /var/run/docker.sock: permission denied. Are you trying to connect to a TLS-enabled daemon without TLS? >docker run -it --rm -v /etc/passwd:/etc/passwd:ro -v /etc/group:/etc/group:ro -v /etc/shadow:/etc/shadow:ro -v /etc/sudoers:/etc/sudoers:ro -v /var/run/docker.sock:/var/run/docker.sock -u $(id -u):$(id -g) foo-image sudo docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 68ad8106f46d foo-image "sudo docker ps" Less than a second ago Up Less than a second lonely_pike cf82090e3c59 sha256:343ffac52c3e717dd9a4ed03d172505ee457f1fdc3b86decc77b6a51b8ef119b "bash" 9 hours ago Up 9 hours suspicious_swirles ... 

我错过了什么?

不是/etc/group确定用户组成员身份的唯一文件吗?

主机是Ubuntu 14.04,图像基于ubuntu:14.04.something,所以它是兼容的(虽然我观察到16.04主机相同的行为)。

用Docker 1.12.2和1.13.1观察。