在容器内插入主机绑定的docker.sock会破坏主机docker

时间:2019-06-17 08:27:23

标签: macos docker ubuntu docker-in-docker

在适用于Mac的Docker的原始安装中,我的docker.sock由我的本地用户拥有:

$ stat -c "%U:%G" /var/run/docker.sock

juliano:staff

即使我在Dockerfile上添加了用户和组,当尝试以我的身份运行DinD时,docker.sock的装载也是使用root:root创建的。

$ docker run -it --rm \
    --volume /var/run/docker.sock:/var/run/docker.sock \
    --group-add staff \
    --user $(id -u):$(id -g) \
    "your-average-container:latest" \
    /bin/bash -c 'ls -l /var/run/docker.sock' 

srw-rw---- 1 root root 0 Jun 17 07:34 /var/run/docker.sock

反之,以root身份运行DinD,chown插入套接字,然后运行命令破坏主机docker

$ docker run -it --rm \
    --volume /var/run/docker.sock:/var/run/docker.sock \
    --group-add staff \
    "your-average-container:latest" \
    /bin/bash

$ chown juliano:staff /var/run/docker.sock
$ sudo su juliano
$ docker ps

[some valid docker output]

$ exit

$ docker ps

Error response from daemon: Bad response from Docker engine

我已经看到people报告称使用chowning是一种方式,所以也许我做错了事。

问题:

  • 为什么主机docker中断?
  • 是否有某种方法可以防止主机docker中断并仍将我的用户权限授予docker内部的套接字?

1 个答案:

答案 0 :(得分:1)

我相信,在装入卷时,所有者UID / GID设置为与主机中的相同(--user标志只是允许您以特定的UID / GID身份运行命令,而不会会影响已安装卷的许可)

主要问题是-您为什么需要穿长袜?您不能仅以root用户身份运行容器内的命令吗?