Jenkins管道中的Docker容器在几秒钟后死亡
你好 我试图在Jenkins管道中构建并运行Docker容器,然后在容器中的deyployed web应用程序上进行一些测试。问题是我的容器只存活几秒钟,然后死亡,退出代码为0。已经尝试过在交互模式下运行它,有没有Docker Groovy插件 我的管道代码如下所示:Jenkins管道中的Docker容器在几秒钟后死亡,docker,jenkins,jenkins-pipeline,Docker,Jenkins,Jenkins Pipeline,你好 我试图在Jenkins管道中构建并运行Docker容器,然后在容器中的deyployed web应用程序上进行一些测试。问题是我的容器只存活几秒钟,然后死亡,退出代码为0。已经尝试过在交互模式下运行它,有没有Docker Groovy插件 我的管道代码如下所示: stage("Docker Build&Run") { steps { script { def tag = "shop:${env.BUILD_ID}"
stage("Docker Build&Run") {
steps {
script {
def tag = "shop:${env.BUILD_ID}"
docker.build(tag)
//sh "docker run -d -p 8443:443/tcp ${tag}" Tried both
docker.image(tag).run('-p 8443:443/tcp')
}
}
}
stage("Dummy Dynamic Analysis") {
steps {
echo "Dummy Dynamic Analysis" //to be integrated
sleep 120 //application should be available here since it has to be theire for testing as well
}
}
事件看起来像这样。几秒钟后被摧毁:
2018-11-07T17:27:30.104407703+01:00 image tag sha256:21ae4ef9603d390d0244cee30651485f2fb517a47c9e9d2c38855d093349105c (name=shop:35)
2018-11-07T17:27:31.260144894+01:00 container create ade7069d9d391146611f4f658156554823cc8086bd6769bbc32c3949d5b1a694 (image=shop:35, name=suspicious_liskov)
2018-11-07T17:27:31.456730373+01:00 network connect 36c2d6617773a7c7075caece71bcd744c89009b3db1962328d0f9930d981238a (container=ade7069d9d391146611f4f658156554823cc8086bd6769bbc32c3949d5b1a694, name=bridge, type=bridge)
2018-11-07T17:27:31.966564913+01:00 container start ade7069d9d391146611f4f658156554823cc8086bd6769bbc32c3949d5b1a694 (image=shop:35, name=suspicious_liskov)
2018-11-07T17:27:35.761690515+01:00 container die ade7069d9d391146611f4f658156554823cc8086bd6769bbc32c3949d5b1a694 (exitCode=0, image=shop:35, name=suspicious_liskov)
2018-11-07T17:27:35.929597196+01:00 network disconnect 36c2d6617773a7c7075caece71bcd744c89009b3db1962328d0f9930d981238a (container=ade7069d9d391146611f4f658156554823cc8086bd6769bbc32c3949d5b1a694, name=bridge, type=bridge)
我如何部署容器并让它无限期地运行直到停止,或者至少在jenkins运行的整个时间内运行
先谢谢大家。
您好所以我的docker文件看起来像这样:
FROM ubuntu:14.04
RUN echo "#!/bin/sh\nexit 0" > /usr/sbin/policy-rc.d
ADD ./provision.sh /tmp/provision.sh
RUN /bin/bash /tmp/provision.sh
ENTRYPOINT service apache2 start && service mysql start && /bin/bash
EXPOSE 443
我刚刚读到这篇文章:docker容器将在我的entrypoint调用完成时退出,只要我的服务还活着,它就不会保持活动状态。这就是我认为会发生的事。我现在切换到运行supervisord的建议解决方案,它运行良好。谢谢大家
新Dockerfile:
FROM ubuntu:14.04
RUN echo "#!/bin/sh\nexit 0" > /usr/sbin/policy-rc.d
RUN apt-get update && apt-get install supervisor -y
ADD ./provision.sh /tmp/provision.sh
ADD ./supervisord.conf /etc/supervisor/conf.d/supervisord.conf
RUN /bin/bash /tmp/provision.sh
ENTRYPOINT ["/usr/bin/supervisord", "-n"]
EXPOSE 443
主管配置:
[supervisord]
nodaemon=true
[program:mysql]
command=/usr/bin/pidproxy /var/run/mysqld/mysqld.pid /usr/sbin/mysqld
autorestart=true
[program:apache]
command=/usr/sbin/apache2ctl -DFOREGROUND
autorestart=true
您似乎在另一个阶段使用
sleep 120
。你的docker映像在前一阶段构建、运行和完成,然后在后一阶段执行此睡眠。是的,但如果我将睡眠移到另一阶段,实际上不会改变行为。此外,我真的很想保持测试步骤和分色步骤分开。你必须把睡眠放在docker图像上。所以docker映像在完成之前等待。@EmruzHossain表示这是预期的行为?因为当我在同一个构建服务器上本地运行带有-d开关的“docker run”时,它不会永远停止运行。容器日志显示了什么?请尝试docker logs container-id。是否有docker映像的docker文件?如果是,请在此处发布dockerfile