问题背景
环境 : Centos7 下 docker 部署 Jenkins 2.235.5
故障:Jekins 根据页面提示直接版本升级 2.392,重启之后,Jenkins 页面无法访问,容器无限重启,无法进入容器。
原因:查看docker日志 提示如下
Running with Java 8 from /java/jdk, which is older than the minimum required version (Java 11).
即原容器安装的是java 8,Jenkins 新版本最低需求是 java 11。
问题找到了,只要我们能进入容器里,去升级下jdk,或者回退Jenkins版本,对于运维人员来说问题就好解决了,这里就略过后续。
现在问题来了,我们怎么不新建容器,直接进入原容器去修复bug?
解决流程
"Path": "sleep", // 可执行文件
"Args": ["3600"], // 参数
"Entrypoint": [ // 完整命令
"sleep",
"600"
],
注意:修改前注意先备份,后面修复后覆盖回来。
3. 重启docker,使配置生效,即可运行容器。
4. 进入系统修复bug后,改回配置,同样重启docker配置生效。
注意:如果是有其他容器在运行中,不能重启docker的情况下,我们可以根据实际情况变通去处理:
本例中我遇到的Entrypoint启动配置如下:
"Entrypoint": [
"/sbin/tini",
"--",
"/usr/local/bin/jenkins.sh"
],
即通过运行 xx.sh 脚本来启动服务。这样我们可以通过在 xx.sh 脚本前加入“sleep 3600” (参考扩展2),就可以直接启动进入容器。
https://segmentfault.com/a/1190000043471705#ext2
扩展
// 示例容器id: 5ec81637aaaa
docker inspect 5ce8163767a9 | grep ResolvConfPath
// 示例容器id: 5ec81637aaaa 示例文件/usr/local/bin/jenkins.sh
docker cotainer cp 5ec81637aaaa:/usr/local/bin/jenkins.sh .
cp jenkins.sh jenkins.sh.backup
sed -i "2i sleep 600" jenkins.sh
docker cp jenkins.sh 5ec81637aaaa:/usr/local/bin/
闭
#Mac中进入Docker Linux虚拟机(Docker Desktop 2.4及以上)
stty -echo -icanon && nc -U ~/Library/Containers/com.docker.docker/Data/debug-shell.sock && stty sane # ls -al /var/lib/docker/overlay2/
总结反思
升级前应确认新版本环境要求是否满足
备份很重要!即便Jenkins有升级回滚功能,只要一次异常就可能造成无法挽回的错误
希望有帮到读者,如有错误的地方、需要补充的、有更好的方案、其他心得也欢迎指正。
参考:
https://segmentfault.com/a/1190000043471705