0

我的问题基本上是容器内访问 Docker 套接字从 (jenkins) docker 容器访问 docker 主机的组合

我的目标

运行 Jenkins 完全 dockerized,包括动态从属,并能够在从属中创建 docker-containers。

除了最后一部分,如果 Unix-docker-sock 正确地暴露给 Jenkins 主服务器,那么由于https://github.com/maxfields2000/dockerjenkins_tutorial ,一切都已经开始工作了。

问题

与动态配置的从属不同,主控是通过 docker-compose 启动的,因此可以正确访问 UNIX 套接字。

对于动态生成的从站,这种方法不起作用。我试图将访问权限转发给 docker

VOLUME /var/run/docker.sock
VOLUME /var/lib/docker

在构建图像期间。不幸的是,到目前为止,我Permission denied (socket: /run/docker.sock)在尝试访问docker.sock从属设备时遇到了一个问题,它的创建方式如下:https ://gist.github.com/geoHeil/1752b46d6d38bdbbc460556e38263bc3 奇怪的是:从属设备中的用户是 root。

那么为什么我无法访问docker.sock?或者我怎么能在--privileged标志中烧掉,这样权限被拒绝的问题就会消失?

4

1 回答 1

2

在 docker 1.10 中引入了一个新的 User 命名空间,因此共享 docker.sock 是不够的,因为容器内的 root 不再是主机上的 root。我最近也玩过 Jenkins 容器,我想使用主机 docker 引擎构建容器。我做的步骤是:

查找 docker 组的组 ID:

$ id
..... 999(docker)

运行带有两个卷的 jenkins 容器 - 一个包含 docker 客户端可执行文件,另一个共享 docker unix 套接字。请注意我如何使用--group-add将容器用户添加到 docker 组以允许访问:

docker run --name jenkins -tid -p 8080:8080 --group-add=999 -v /path-to-my-docker-client:/home/jenkins/docker -v /var/run/docker.sock:/var/run/docker.sock jenkins

测试并发现它确实有效:

docker exec -ti jenkins bash
./docker ps

在此处查看有关其他组的更多信息

另一种方法是使用--privileged标志而不是--group-add,但如果可能的话最好避免使用它

于 2016-04-14T05:24:33.220 回答