【问题标题】:chowning the host's bound `docker.sock` inside container breaks host docker在容器内 chowning 主机绑定的 docker.sock 会破坏主机 docker
【发布时间】:2019-10-30 19:43:06
【问题描述】:

在 Docker for Mac 的香草安装中,我的 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,chowning 套接字,然后运行命令破坏主机 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 内的套接字?

【问题讨论】:

    标签: macos docker ubuntu docker-in-docker


    【解决方案1】:

    我相信,当您安装卷时,所有者 UID/GID 设置为与主机中的相同(--user 标志仅允许您将命令作为特定 UID/GID 运行,但它不会不会影响挂载卷的权限)

    主要问题是 - 为什么需要 chown?你不能以root身份运行容器内的命令吗?

    【讨论】:

    • 1) 抱歉,不,就像我在问题中显示的那样,UID/GID 在安装时设置为 root:root。 2) 为什么:如果我以 root 身份将文件写入卷,它们会以 root 身份写入原始文件系统,从而阻止我在 docker 和非 docker 进程之间共享可写资源。
    • 1) 让我进一步澄清。我认为我看到的行为特定于 Docker for Mac。我刚刚在 Ubuntu 中对此进行了测试,并且确实在安装时进行了所有权。我想这可能是由于 Ubuntu 中的 cgroups 与 Mac 上的虚拟化。我确实需要同时支持这两个平台。
    • 我刚刚测试了在已安装卷中创建的文件的所有权,这就是我的经验:当您将卷安装到容器时,容器内文件夹的所有者将是您分配使用的用户--用户标志。当您从主机文件系统中的容器在该文件夹中创建文件时,它将由 docker.sock 所有者的用户拥有
    • 但问题仍然存在 - 您在容器中使用 docker.sock 的实际需要是什么?如果你能提供一个具体的例子说明什么不起作用,我可能会测试并看看潜在的问题可能是什么
    • 所有权测试:我在这里看到实际上与所有权混合的行为。在 macOS 中,我的 docker.sock 被挂载为 root 所拥有,而与 --user 无关。我的应用程序文件夹以 --user 作为所有者挂载。
    猜你喜欢
    • 2016-07-27
    • 1970-01-01
    • 2020-02-20
    • 2021-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多