如何在 Jenkins Docker 容器内部使用 Docker

5
我希望您能够翻译以下内容:我遇到了一个问题:我创建了一个Jenkins Docker容器,并将主机上的Docker套接字与该容器链接。就像这样:

docker run -v /var/run/docker.sock:/var/run/docker.sock -p 8080:8080 -p 50000:50000 -d --name jenkins --restart unless-stopped jenkins

当我尝试在Jenkins上创建一些作业时,我会收到通常的“权限被拒绝”消息:
``` 无法连接到Docker守护程序套接字unix:///var/run/docker.sock获取http://%2Fvar%2Frun%2Fdocker.sock/v1.29/images/json:拨号unix / var / run / docker.sock:连接:权限被拒绝 ```
但是,如果我附加到容器并使用root用户运行命令,则不会出现此问题。
我该如何解决这个问题?
我无法通过运行`sudo gpasswd -a jenkins docker`将jenkins用户添加到主机上的docker组(因为主机上没有jenkins用户,只有容器中才有),我也无法在容器内运行此命令(因为容器不知道任何docker组)。有关如何解决此问题的任何提示?

1
尝试在运行容器时添加 --privileged 参数。命令看起来像这样 docker run -v /var/run/docker.sock:/var/run/docker.sock -p 8080:8080 -p 50000:50000 -d --name jenkins --restart unless-stopped --privileged jenkins - Bukharov Sergey
1个回答

3

您可以在容器内添加docker组。请在bash中执行以下操作:

groupadd -g <docker-group-id> docker

通过在主机上运行以下命令查找 <docker-group-id>

ls -ln /var/run/docker.sock

然后将jenkins用户添加到docker组中:
gpasswd -a jenkins docker

请注意可能带来的安全问题:

警告:docker组授予了等同于root用户的权限。有关此对系统安全的影响的详细信息,请参阅Docker守护程序攻击面。

请查阅文档


我把你的前两个命令稍微改进了一下,变成了一个命令。就像这样:groupadd -g $(ls -ln /var/run/docker.sock | awk '{print $4}') docker。谢谢! - Vini.g.fer
我该如何获取 <docker-group-id>? - J. Ordaz
当我运行你分享的命令 @Vini.g.fer 时,它显示“groupadd: GID '50' already exists”,你能帮我解决一下吗? :) - J. Ordaz
命令可能会根据您的操作系统略有不同。在Ubuntu 16.04上运行此命令。如果您只运行 ls -ln /var/run/docker.sock,则会得到如下输出 "srw-rw---- 1 0 999 0 Ago 16 13:31 /var/run/docker.sock"。您需要从此命令的输出中获取组号(在我的情况下为999)。此错误消息表示此ID已用于另一个组。也许主机和容器具有不同的组ID。 - Vini.g.fer

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