在jenkins奴隶的容器内访问docker

时间:2016-04-14 04:49:30

标签: sockets jenkins docker jenkins-slave

我的问题基本上是Access Docker socket within containerAccessing docker host from (jenkins) docker container

的组合

我的目标

运行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标志中刻录,以便拒绝权限问题会消失?

1 个答案:

答案 0 :(得分:2)

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

查找docker group的组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,但如果可能的话,最好使用它来避免它