共计 1517 个字符,预计需要花费 4 分钟才能阅读完成。
问题背景
环境 : 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?
解决流程
- 找到容器的配置目录里的 config.v2.json(参考扩大 1)。
-
要批改的中央有三个字段,别离是 Path、Args,和 Entrypoint(也可能是 CMD)。这里咱们心愿容器能启动进入即可,所以启动命令能够为 ”sleep 3600″ (休眠 1 小时)。
"Path": "sleep", // 可执行文件 "Args": ["3600"], // 参数 "Entrypoint": [ // 残缺命令 "sleep", "600" ],
留神:批改前留神先备份,前面修复后笼罩回来。
- 重启 docker,使配置失效,即可运行容器。
- 进入零碎修复 bug 后,改回配置,同样重启 docker 配置失效。
留神:如果是有其余容器在运行中,不能重启 docker 的状况下,咱们能够依据理论状况变通去解决:
本例中我遇到的 Entrypoint 启动配置如下:
"Entrypoint": [
"/sbin/tini",
"--",
"/usr/local/bin/jenkins.sh"
],
即通过运行 xx.sh 脚本来启动服务。这样咱们能够通过在 xx.sh 脚本前退出“sleep 3600”(参考扩大 2),就能够间接启动进入容器。
扩大
-
如何查看容器的配置目录(通常为 /var/lib/docker/containers/{CONTAINER ID})
// 示例容器 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/
-
容器有限重启的根本原因
- 容器的启动参数设置了 –restart=always,可通过 docker update 批改
- 容器常驻过程启动失败,没有运行中的过程即主动敞开
-
mac 中的容器配置,cd 门路不存在
# 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 有降级回滚性能,只有一次异样就可能造成无法挽回的谬误
心愿有帮到读者,如有谬误的中央、须要补充的、有更好的计划、其余心得也欢送斧正。
正文完