Jenkins docker-pipeline插件docker.image.inside执行后无法结束求助
Jenkins Docker流水线执行后停滞问题排查
问题描述
我尝试使用docker-pipeline插件运行以下Groovy流水线:
pipeline { agent any stages { stage("Some Impressive Stage Name") { steps { script { docker.image("alpine").inside() { sh "echo 'hello world!'" } } } } } }
这条简单的流水线始终无法结束。我确认镜像在2秒内已完成拉取并启动,但流水线在执行hello world步骤时陷入停滞。当前使用的Jenkins版本为2.401.1,docker-pipeline插件版本为563.vd5d2e5c4007f,请问问题出在哪里?
排查与解决方法
修正容器PID 1进程退出逻辑
Alpine镜像默认PID 1是sh,而Jenkins的docker-workflow插件依赖容器主进程退出才会结束步骤。sh执行完echo后可能因终端交互特性未正常退出,导致容器挂起。可以通过exec让命令成为PID 1进程,确保执行后直接退出:docker.image("alpine").inside() { sh "exec echo 'hello world!'" }添加init进程管理容器生命周期
使用--init参数引入tini进程管理容器的PID 1,确保子进程退出后容器能正常终止:docker.image("alpine").inside("--init") { sh "echo 'hello world!'" }验证Jenkins代理的Docker权限与网络
确认Jenkins代理用户(如jenkins)拥有Docker管理权限,同时检查Docker daemon的网络配置,避免容器与代理间的通信阻塞。排查版本兼容性
虽然当前插件与Jenkins版本理论兼容,但可尝试升级docker-pipeline插件到最新稳定版,或回退到稍旧版本,排除版本间的潜在bug。查看日志定位线索
检查Jenkins系统日志(Manage Jenkins → System Log),以及停滞容器的日志(执行docker logs <容器ID>),寻找报错、资源耗尽或权限问题的具体信息。
内容的提问来源于stack exchange,提问作者Sillydan
相关产品推荐
相关产品推荐

