关于docker:docker容器无限重启不新建容器进入原容器修复bug

问题背景

环境 : 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?

解决流程

  1. 找到容器的配置目录里的 config.v2.json (参考扩大1)。
  2. 要批改的中央有三个字段,别离是Path、Args,和Entrypoint(也可能是CMD)。这里咱们心愿容器能启动进入即可,所以启动命令能够为”sleep 3600″ (休眠1小时)。

    "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),就能够间接启动进入容器。

扩大

  1. 如何查看容器的配置目录(通常为/var/lib/docker/containers/{CONTAINER ID})

    // 示例容器id: 5ec81637aaaa  
    docker inspect 5ce8163767a9 | grep ResolvConfPath

  2. 不在运行状态的容器,如何批改未映射的文件内容

    // 示例容器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/
  3. 容器有限重启的根本原因

    • 容器的启动参数设置了 –restart=always,可通过docker update 批改
    • 容器常驻过程启动失败,没有运行中的过程即主动敞开
  4. 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/

总结反思

  1. 降级前应确认新版本环境要求是否满足
  2. 备份很重要!即使Jenkins有降级回滚性能,只有一次异样就可能造成无法挽回的谬误

心愿有帮到读者,如有谬误的中央、须要补充的、有更好的计划、其余心得也欢送斧正。

【腾讯云】轻量 2核2G4M,首年65元

阿里云限时活动-云数据库 RDS MySQL  1核2G配置 1.88/月 速抢

本文由乐趣区整理发布,转载请注明出处,谢谢。

您可能还喜欢...

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据