我想知道为什么下面的--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
它出错了
docker: Error response from daemon: Unable to find group docker.
我在使用其他映像(如ubuntu
、hello-world
等)时遇到了同样的问题。映像中需要什么才能添加docker
组?
我的系统:
- Ubuntu 18.04
- Docker 2013年3月19日
我知道主机中有docker
组,可以在groups
的输出中看到它。
2条答案
按热度按时间nmpmafwu1#
使用命令时,您尝试将当前用户添加到组
docker
,但添加到 inside docker,而不是主机中。由于docker中不存在组
docker
,因此您会收到错误消息。如果确实需要,可以使用
groupadd docker
创建组,然后将用户添加到组中。qoefvg9y2#
不幸的是,docker尝试在装载卷之前设置组(以及uid/gid),因此组
docker
(在主机上的/etc/group
中定义)此时在容器中不可见,因为它不是映像中包含的/etc/group
文件。**[编辑]**在现代的Docker(例如20.10.23)中,使用数字gid作为Docker组就可以了。例如,如果Docker gid是999,使用
--group-add 999
代替--group-add docker
。一个可能的解决方案是创建自己的映像,并将适当的
/etc/group
(可能还有passwd
)文件放入其中,这不像只操作合成文件那么方便,但肯定会起到作用。另一种方法是使用setpriv作为容器入口点。由于入口点是在装入卷后执行的,因此它可以访问已装入的
/etc/group
文件的内容。其他类似工具(如gosu或su-exec)不支持辅助组ARAIK,但您可能会在其文档中找到一些安全相关信息,您可能需要考虑这些信息。具体取决于您的使用情形。