访问jenkins奴隶容器内的docker
我的问题基本上是容器中的Access Docker套接字和从(jenkins)docker 容器中 访问docker主机的组合
我的目标
运行Jenkins完全docker化,包括dynamic奴隶,并能够在奴隶内创builddocker集装箱。
除了最后一部分,如果Unix docker-sock正确地暴露给Jenkins主,那么所有东西都已经在工作,这要归功于https://github.com/maxfields2000/dockerjenkins_tutorial 。
问题
与dynamicconfiguration的从站不同,主站通过docker-compose启动,因此可以正确访问UNIX套接字。
对于dynamic生成的从站,这种方法不起作用。 我试图转发访问docker像
VOLUME /var/run/docker.sock VOLUME /var/lib/docker
在build设的形象。 不幸的是到目前为止,当我尝试访问docker.sock
中的Permission denied (socket: /run/docker.sock)
时,我得到了一个Permission denied (socket: /run/docker.sock)
奇怪的是是:从机中的用户是root。
那为什么我不能访问docker.sock
? 或者我怎么能在--privileged
标志烧,这样的权限被拒绝的问题会消失?
随着docker1.10一个新的用户命名空间被引入,因此共享docker.sock是不够的,因为容器内的根不再是在主机上的根。 我最近和jenkins一起玩过容器,我想用主机docker引擎来构build容器。 我做的步骤是:
查找docker组的组ID:
$ id ..... 999(docker)
用两卷运行jenkins容器 – 一个包含docker客户端可执行文件,另一个共享docker unix套接字。 请注意我如何使用--group-add
将容器用户--group-add
到泊坞窗组,以允许访问:
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
经过testing,发现它的工作方式是:
docker exec -ti jenkins bash ./docker ps
在这里查看更多关于其他群体
另一种方法是使用--privileged
标志而不是--privileged
-add,但是如果可能,最好避免使用它