如何避免从浏览器重启Jenkins时Docker容器意外终止?
Jenkins重启时容器终止的原因及解决方法
问题背景
升级至Jenkins v2.375.1后,使用以下Docker命令启动容器:
docker run --rm -d -p 8080:8080 -v /mnt/jenkins_master/jenkins_home:/var/jenkins_home --name jenkins_master --memory=40g 1234567890.dkr.ecr.eu-north-1.amazonaws.com/jenkins_master:2.375.1
通过浏览器访问myJenkins.domain.com/restart重启Jenkins时,容器直接终止,旧版本无此问题。
核心原因
Jenkins v2.375.1及后续版本调整了进程管理逻辑:当Jenkins主进程收到重启信号后,会主动退出。而你启动容器时使用了--rm参数,该参数的作用是容器停止后自动删除容器,主进程退出会触发Docker终止整个容器实例。
旧版本Jenkins的重启机制多为内部进程重启,不会触发主进程退出,因此不会触发--rm对应的容器终止行为。
解决方法
方法1:移除--rm参数启动容器
启动容器时去掉--rm,这样即使Jenkins主进程退出重启,容器不会被自动删除,Docker会重新拉起主进程:
docker run -d -p 8080:8080 -v /mnt/jenkins_master/jenkins_home:/var/jenkins_home --name jenkins_master --memory=40g 1234567890.dkr.ecr.eu-north-1.amazonaws.com/jenkins_master:2.375.1
若需清理无用容器,可手动执行docker rm <容器名/ID>,避免自动删除导致的重启异常。
方法2:配置Docker容器的重启策略
添加--restart always或--restart unless-stopped参数,确保Jenkins主进程退出后,Docker自动重启容器:
docker run -d -p 8080:8080 -v /mnt/jenkins_master/jenkins_home:/var/jenkins_home --name jenkins_master --memory=40g --restart always 1234567890.dkr.ecr.eu-north-1.amazonaws.com/jenkins_master:2.375.1
注意:--rm和--restart参数存在兼容问题,部分Docker版本中同时使用可能导致重启策略失效,更推荐方法1。
方法3:修改Jenkins重启行为(不推荐)
通过修改Jenkins配置禁用主进程退出式重启,但这种方式会跳过官方标准重启流程,可能导致配置不生效或潜在稳定性问题,不建议采用。
内容的提问来源于stack exchange,提问作者Chris F
相关产品推荐
相关产品推荐

