如何正确启动也在Docker中运行的Jenkins内部的Docker

我试图在一个也在Docker中运行的Jenkins容器(也就是在Docker中的Docker)中运行Docker。 我想知道的是如何在启动Jenkins时正确启动Docker服务。 我今天发现的唯一解决scheme是基于官方的 Jenkins图像构build我自己的Jenkins图像,但更改由入口点加载的jenkins脚本也启动Docker:

# I've added this line just before Jenkins is started from the script: sudo service docker start # I've also removed "exec" from the original file which used "exec java $JAVA_TOPS ..." but that didn't work java $JAVA_OPTS -jar /usr/share/jenkins/jenkins.war $JENKINS_OPTS "$@" 

这工作时run (使用docker run )一个新的容器,但问题是,如果我( docker start )在停止的容器上的Docker服务没有启动。

我强烈怀疑这不是启动我的Docker服务的正确方法。 我的计划是,也许使用supervisord分别启动Jenkins和Docker(我认为容器连接是不可能的,因为Docker应该作为Jenkins运行的同一容器上的服务来执行)。 我对这种方法的担心是,我将失去Jenkins Dockerfile指定的EntryPoint ,允许我在启动容器时将parameter passing给Jenkins容器,例如:

 docker run -p 8080:8080 -v /your/home:/var/jenkins_home jenkins -- <jenkins_arguments> 

有没有人有一个好的方法来解决这个问题,而不是分叉jenkins官方形象的任何build议?

我很漂亮,你不能这样做。

在Docker中的Docker并不意味着你必须在docker里面运行3级的docker:host>一级容器>二级容器

实际上,你只需要将docker与主机共享,这是你的主机谁将运行其他容器。

为此,您必须使用-v参数装入卷

 -v /var/run/docker.sock:/var/run/docker.sock 

使用这个命令,当你将docker运行在你的jenkins容器中的时候,docker客户端将和你的主机上的docker deamon进行通信,以便运行新的容器。

要做到这一点,你应该运行你的jenkins容器的特权

 --privileged 

恢复,这里是完整的命令行

 docker run -d -v /var/run/docker.sock:/var/run/docker.sock --privileged myimage 

你不需要为此创build一个新的jenkins图像。

希望能帮到你

http://container-solutions.com/running-docker-in-jenkins-in-docker/