Linux 如何防止docker在发生错误时停止/移除容器

Linux 如何防止docker在发生错误时停止/移除容器,linux,bash,docker,jenkins-pipeline,jenkins-groovy,Linux,Bash,Docker,Jenkins Pipeline,Jenkins Groovy,假设我有一个运行docker容器的Jenkins groovy代码,其中将运行一些bash: docker.withRegistry(dockerRegistry, dockerCredentials) { docker.image(new String(dockerImage + ":" + dockerVersion)).inside(mountCommand) { try { withEnv(["AWS_PROFILE=${mapp

假设我有一个运行docker容器的Jenkins groovy代码,其中将运行一些bash:

    docker.withRegistry(dockerRegistry, dockerCredentials) {
    docker.image(new String(dockerImage + ":" + dockerVersion)).inside(mountCommand) {

        try {
            withEnv(["AWS_PROFILE=${mappings['stackEnv']}",
                     "FULL_PACKAGE_VERSION=${mappings['revision']}",
                     "ARTIFACTORY_USER=${IC_ARTIFACTORY_USER}"]) {
                withCredentials([
                        string(credentialsId: IC_ARTIFACTORY_KEY, variable: 'ARTIFACTORY_KEY')
                ]) {
                    sh '''
                    bash -x Jenkinsfile-e2e-test.sh
                '''
                }
            }
        } finally { }
    }
}
如果
Jenkinsfile-e2e-test.sh因某种原因下降,则Jenkins将自动停止并移除容器:

09:40:08 $ docker stop --time=1 6e78cf6d940cb1ca1cb1c729617fd3e6ba3fa4085c2750908dff8f2a1e7ffeed
09:40:09 $ docker rm -f 6e78cf6d940cb1ca1cb1c729617fd3e6ba3fa4085c2750908dff8f2a1e7ffeed

如何防止Jenkins在发生故障时销毁容器?

您可以使用以下方法确保命令不会失败:

bash -x Jenkinsfile-e2e-test.sh || true
或者更好:

bash -x Jenkinsfile-e2e-test.sh > e2e.log 2>&1 & || true
# check the log file and do something based on the log

您可以使用以下方法确保命令不会失败:

bash -x Jenkinsfile-e2e-test.sh || true
或者更好:

bash -x Jenkinsfile-e2e-test.sh > e2e.log 2>&1 & || true
# check the log file and do something based on the log

一旦
.inside
命令完成,Jenkins将始终停止并移除容器。无论bash脚本成功还是失败

背后的原因是jenkins负责为您进行内务管理,以防止您最终在构建机器上挂满大量停止的容器

这是
Image.withRun
Image.inside
方法的情况。 如果要控制容器的生命周期,应使用
Image.run

使用docker run运行映像,并返回一个容器,您可以稍后停止该容器


(from)

一旦
.inside
命令完成,Jenkins将始终停止并移除容器。无论bash脚本成功还是失败

背后的原因是jenkins负责为您进行内务管理,以防止您最终在构建机器上挂满大量停止的容器

这是
Image.withRun
Image.inside
方法的情况。 如果要控制容器的生命周期,应使用
Image.run

使用docker run运行映像,并返回一个容器,您可以稍后停止该容器


(from)

谢谢,解释得很好谢谢,解释得很好