温馨提示×

CentOS系统升级时Docker如何处理

小樊
32
2025-12-25 06:25:17
栏目: 智能运维

CentOS 系统升级时的 Docker 处理指南

一、升级前的准备与影响

  • 明确范围:区分是系统小版本更新(如 7.x → 7.y)还是跨大版本(如 CentOS 7 → 8/9)。跨大版本通常需要全新安装 Docker,旧版二进制与配置不保证兼容。
  • 备份关键数据:优先备份**/var/lib/docker**(镜像、容器、卷元数据)、/etc/docker/daemon.json 及业务编排文件(如 docker-compose.yml)。
  • 梳理现状:记录当前 Docker/Containerd 版本存储驱动(如 overlay2)、自定义启动参数与网络配置,便于回滚与比对。
  • 选择策略:
    • 小版本系统升级:优先采用就地升级 Docker 引擎并验证兼容性;
    • 跨大版本系统升级:建议并行部署新系统 + 新 Docker,通过导出/导入镜像或重建容器完成迁移,降低风险。

二、就地升级 Docker 的标准步骤(适用于 CentOS 7 小版本升级)

  • 停止服务并清理旧包:
    • systemctl stop docker docker.socket containerd
    • 卸载旧版(避免冲突):yum remove -y docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine
  • 安装依赖与仓库:
    • yum install -y yum-utils device-mapper-persistent-data lvm2
    • yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
  • 查询与安装版本:
    • 查看可用版本:yum list docker-ce --showduplicates | sort -r
    • 安装指定或最新版本:yum install -y docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io docker-compose-plugin
  • 启动与自启:
    • systemctl daemon-reload
    • systemctl start docker && systemctl enable docker
  • 验证:
    • docker version、docker info、docker run --rm hello-world
      说明:上述流程覆盖卸载旧版、添加官方仓库、指定版本安装与启动验证,适合在系统小版本升级时就地升级 Docker。

三、升级后的兼容性处理与常见问题

  • 旧容器无法启动(runtime 不兼容):
    • 典型报错:Error response from daemon: Unknown runtime specified docker-runc
    • 处理(先备份 /var/lib/docker/containers):
      • grep -rl ‘docker-runc’ /var/lib/docker/containers/ | xargs sed -i ‘s/docker-runc/runc/g’
      • systemctl restart docker
    • 原因:新旧版本中 runc 可执行文件命名/路径变化导致配置残留不兼容。
  • 服务启动失败排查:
    • 使用 systemctl status docker.service 与 journalctl -xe 定位错误;
    • 若曾自定义 /etc/systemd/system/docker.service.d/override.conf,必要时重置 ExecStart 并重新加载:
      • 在 override.conf 中设置 ExecStart= 与 ExecStart=/usr/bin/dockerd,然后 systemctl daemon-reload && systemctl restart docker。
  • 升级后容器不兼容:
    • 多数场景下,已存在的容器可正常启动且数据不受影响;若个别镜像/应用因 API/运行时变更异常,优先重建容器并更新镜像版本。

四、跨大版本或紧急场景的可选方案

  • 使用官方安装脚本快速部署:
    • curl -fsSL https://get.docker.com | sh(适合全新环境快速落地,随后按需配置 daemon.json 与存储驱动)。
  • 二进制静态包强制安装(版本可控,适合紧急修复):
    • 下载并校验 Docker、Containerd、runc 的官方静态包,解压至 /usr/local/bin,编写 systemd 服务文件(ExecStart 指向 /usr/local/bin/dockerd,配置 containerd 套接字与存储驱动为 overlay2),然后 systemctl daemon-reload && systemctl enable --now docker。
    • 注意:此方式需自行维护依赖与升级路径,生产环境务必充分测试。

0