【问题标题】:How to use docker from inside Jenkins docker container如何在 Jenkins docker 容器中使用 docker
【发布时间】:2017-08-01 20:47:24
【问题描述】:

我面临以下问题:我创建了一个 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 组)。有关如何解决此问题的任何提示?

【问题讨论】:

  • 在运行容器时尝试添加--privileged agrument。命令看起来像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

标签: docker jenkins


【解决方案1】:

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

groupadd -g <docker-group-id> docker

找出在主机中运行这个的&lt;docker-group-id&gt;

ls -ln /var/run/docker.sock

然后将jenkins用户加入docker组:

gpasswd -a jenkins docker

考虑到这可能产生的任何安全问题:

警告:docker 组授予与 root 用户等效的权限。有关这如何影响系统安全性的详细信息,请参阅 Docker Daemon Attack Surface。

参考docs

【讨论】:

  • 我最终将您的前 2 个命令改进为一个。像这样:groupadd -g $(ls -ln /var/run/docker.sock | awk '{print $4}') docker。谢谢!
  • 我怎样才能得到
  • 当我运行你分享的命令时@Vini.g.fer。它说“groupadd:GID'50'已经存在”,你能帮我解决这个问题吗? :)
  • 命令可能会根据您的操作系统有所变化。在 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。
猜你喜欢
  • 2017-08-14
  • 2019-08-28
  • 2016-09-07
  • 2020-10-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-08
  • 1970-01-01
相关资源
最近更新 更多