使用"--group-add docker"时出现了"Docker组未找到"的问题。

5
我想知道为什么以下命令中的 --group-add docker 无法正常工作,但是我有另一个优先级更高的镜像可以正常工作。
docker run \
    --rm \
    -it \
    -v /var/run/docker.sock:/var/run/docker.sock \
    -v /etc/docker/daemon.json:/etc/docker/daemon.json \
    -v /etc/shadow:/etc/shadow \
    -v /etc/passwd:/etc/passwd \
    -v /etc/sudoers:/etc/sudoers \
    -v /etc/group:/etc/group \
    -u $(id -u):$(id -g) \
    --group-add docker \
    docker/compose:debian-1.27.4 \
    bash

IT 出错了

docker: Error response from daemon: Unable to find group docker.

我遇到了与其他镜像(如ubuntu, hello-world等)相同的问题。要想将用户添加到docker组,需要在镜像中安装什么?

我的系统:

  • Ubuntu 18.04
  • Docker 19.03.13

我知道在宿主机中有docker组。我可以通过groups命令的输出看到它。

2个回答

1
不幸的是,Docker 尝试在挂载卷之前设置组(以及 uid/gid),因此主机上定义的组 docker(在 /etc/group 文件中)在容器内部此时不可见,因为它不在镜像中包含的 /etc/group 文件中。
[编辑] 在现代 Docker(例如 20.10.23)中,使用 docker 组的数字 gid 可以解决问题。例如,如果 docker gid 是 999,则使用 --group-add 999 而不是 --group-add docker。
一种可能的解决方案是创建自己的镜像,并将适当的 /etc/group(和可能的 passwd)文件放入其中。这不像仅操作 compose 文件那么方便,但肯定可以解决问题。
另一个选择是使用setpriv作为容器入口点。由于入口点在挂载卷后执行,因此它可以访问已挂载的/etc/group文件的内容。其他类似的工具,如gosusu-exec不支持辅助组ARAISK,但您可能会在其文档中找到一些安全相关信息,这取决于您的用例。

0

通过您的命令,您正在尝试将当前用户添加到组docker中,但是在内部的docker中,而不是在主机中。

由于在docker内不存在docker组,所以您出现了错误消息。

如果这确实是您想要的,您可以使用groupadd docker创建该组,然后将用户添加到该组。


如果我添加groupadd行,它会运行容器,但是容器内部的服务器执行docker info命令时会出现权限错误。 `yousof@5e6d57da4ced:/$ docker info 客户端: 调试模式:false服务器: 错误:尝试连接到Docker守护程序套接字unix:///var/run/docker.sock时,权限被拒绝:获取http://%2Fvar%2Frun%2Fdocker.sock/v1.40/info:拨号unix /var/run/docker.sock: 连接:权限被拒绝 错误漂亮打印信息` - Yousof
“groups” 不显示当前用户的 “docker”。 - Yousof

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接