Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jenkins管道中的Docker容器在几秒钟后死亡_Docker_Jenkins_Jenkins Pipeline - Fatal编程技术网

Jenkins管道中的Docker容器在几秒钟后死亡

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}"

你好

我试图在Jenkins管道中构建并运行Docker容器,然后在容器中的deyployed web应用程序上进行一些测试。问题是我的容器只存活几秒钟,然后死亡,退出代码为0。已经尝试过在交互模式下运行它,有没有Docker Groovy插件

我的管道代码如下所示:

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