gpt4 book ai didi

jenkins - 如何在也在Docker中运行的Jenkins中正确启动Docker

转载 作者:行者123 更新时间:2023-12-02 20:27:54 25 4
gpt4 key购买 nike

我正在尝试在也在Docker中运行的Jenkins容器(即Docker中的Docker)中运行Docker。我想知道的是在启动Jenkins时如何正确启动Docker服务。我今天发现的唯一解决方案是基于official Jenkins镜像构建我自己的Jenkins镜像,但是更改入口点加载的jenkins script来启动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 EntryPoint中指定的 Dockerfile,这使我可以在启动容器时将参数传递给Jenkins容器,例如:
docker run -p 8080:8080 -v /your/home:/var/jenkins_home jenkins -- <jenkins_arguments>

有没有人提出任何建议,以更好的方式解决此问题,最好不要伪造 Jenkins 的官方形象?

最佳答案

我很高兴你不能那样做。

Docker中的Docker并不意味着您必须在Docker内部以3级运行:主机>一级容器>二级容器

实际上,您只需要与主机共享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

而且您不需要为此创建新的 Jenkins 图像。

希望对你有帮助

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

关于jenkins - 如何在也在Docker中运行的Jenkins中正确启动Docker,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29034555/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com