在 jenkins slave 的容器内访问 docker
Access docker within container on jenkins slave
我的问题基本上是Access Docker socket within container and Accessing docker host from (jenkins) docker container
的组合
我的目标
至 运行 Jenkins 完全 docker 化,包括动态从站并能够在从站内创建 docker 容器。
如果 Unix-docker-sock 正确暴露给 Jenkins master,那么除了最后一部分,一切都已经正常工作了https://github.com/maxfields2000/dockerjenkins_tutorial。
问题
与动态配置的从站不同,主站是通过 docker-compose 启动的,因此可以正确访问 UNIX 套接字。
对于动态生成的slave,这种方法是行不通的。
我试图将访问权限转发到 docker 就像
VOLUME /var/run/docker.sock
VOLUME /var/lib/docker
在构建图像的过程中。不幸的是,到目前为止,当我尝试访问从站中的 docker.sock
时,我得到了一个 Permission denied (socket: /run/docker.sock)
,它的创建方式如下:https://gist.github.com/geoHeil/1752b46d6d38bdbbc460556e38263bc3
奇怪的是:slave中的用户是root。
那么为什么我无法访问 docker.sock
?或者我怎样才能在 --privileged
标志中刻录以便权限被拒绝的问题消失?
随着 docker 1.10 引入了一个新的用户命名空间,因此共享 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
查看有关其他群组的更多信息here
另一种方法是使用 --privileged
标志而不是 --group-add,但最好尽可能避免使用它
我的问题基本上是Access Docker socket within container and Accessing docker host from (jenkins) docker container
的组合我的目标
至 运行 Jenkins 完全 docker 化,包括动态从站并能够在从站内创建 docker 容器。
如果 Unix-docker-sock 正确暴露给 Jenkins master,那么除了最后一部分,一切都已经正常工作了https://github.com/maxfields2000/dockerjenkins_tutorial。
问题
与动态配置的从站不同,主站是通过 docker-compose 启动的,因此可以正确访问 UNIX 套接字。
对于动态生成的slave,这种方法是行不通的。 我试图将访问权限转发到 docker 就像
VOLUME /var/run/docker.sock
VOLUME /var/lib/docker
在构建图像的过程中。不幸的是,到目前为止,当我尝试访问从站中的 docker.sock
时,我得到了一个 Permission denied (socket: /run/docker.sock)
,它的创建方式如下:https://gist.github.com/geoHeil/1752b46d6d38bdbbc460556e38263bc3
奇怪的是:slave中的用户是root。
那么为什么我无法访问 docker.sock
?或者我怎样才能在 --privileged
标志中刻录以便权限被拒绝的问题消失?
随着 docker 1.10 引入了一个新的用户命名空间,因此共享 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
查看有关其他群组的更多信息here
另一种方法是使用 --privileged
标志而不是 --group-add,但最好尽可能避免使用它