升级 Docker 引擎到最新版本而不影响正在运行的容器服务,核心在于做好数据备份与兼容性检查。虽然理论上升级引擎需重启守护进程导致容器短暂中断,但通过备份 `/var/lib/docker` 目录、停止服务、卸载旧版本、安装新版本后恢复数据目录,可确保容器和镜像不丢失。对于生产环境,建议先确认内核与配置兼容性,采用灰度升级策略,并在升级后验证关键功能,必要时修改容器运行时配置以适配新版本。
DockerEngine 升级流程与向下兼容性处理方案
升级 Docker Engine 的核心原则是先确认兼容性、再分环境灰度升级、最后验证关键功能;需严格遵循官方向下兼容承诺 (仅限同主版本内),跨主版本升级须重点核查内核、containerd、配置语法、插件等兼容性,并执行备份、可控安装、行为适配与全流程验证。升级 Docker Engine 时,核心原则是:先确认兼容性,再分环境灰度升级,最后验证关键功能。Docker 官方对向下兼容有明确承诺,但仅限于同一主版本内 (如 24.x → 24.y) 的次版本升级默认兼容;跨主版本 (如 23.x → 24.x) 需重点关注变更日志与运行时行为差异,不可直接跳升。一、升级前必查:兼容性清单与风险点 不依赖“应该没问题”的猜测,必须逐项核对:宿主机内核版本:Docker 24+ 要求 Linux kernel ≥ 5.10(CentOS 7 默认 3.10 不支持,需升级或换发行版) 容器运行时接口 (CRI) 兼容性:若使用 containerd 独立部署,需确保 containerd 版本与新 Docker 匹配 (如 Docker 24.0+ 推荐 containerd 1.7+) 自定义配置文件语法变更:/etc/docker/daemon.json 中已弃用字段 (如 icc、disable-legacy-registry) 在 24.x 中会报错启动失败 插件与扩展兼容性:如旧版 volume 插件、网络驱动 (weave/flannel 旧版) 可能未适配新的 OCI 运行时接口
【Docker】升级 docker 或者 docker 到 docker-ce 完全保留镜像和容器,不影响原容器使用方法
以下是我的使用场景,docker 升级到 docker-ce,但对于 docker-ce 升级也通用!亲测!一、介绍 CentOS 自带的 docker 是早期的版本,支持的功能比较少,而且已经没有人维护了。最新的版本存在于 docker 团队维护的版本,社区版本是 docker-ce,企业版本是 docker-ee。由于默认 CentOS 自带的是早期的版本的 docker,所以 yum 默认也是下旧的 docker。我当时没太在意,就正常使用,装了几个容器,并有数据在里面。后来在拉取一个镜像时,报错:missing signature key,于是参考博文,需要升级 docker。那么如何升级 docker 并且不能丢失我的容器和数据呢?二、升级方法 1. 首先先把服务停止了,不要直接卸载 2. 重命名数据目录 把默认的 docker 目录改一下名称。3. 删除服务 现在就可以安全地删除旧版本的 docker 服务了。yum -y remove docker yum -y remove docker-client yum -y remove docker-common 或者使用 4. 安装 docker-ce yum -y install yum-utils yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo yum -y install docker-ce-18.06.3.ce-3.el7 切记:不要启动 docker!! 5. 恢复数据目录 安装完 docker-ce 后,系统会创建新的 docker 目录,删除新的,如何把备份的改回 docker 名称。切记:不要启动 docker!! rm -rf /var/lib/docker mv /var/lib/docker-bak /var/lib/docker 6. 启动 docker 服务 三、遇到问题说明 如果直接启动 docker 服务的容器,会得到下面的报错信息。Error response from daemon: Unknown runtime specified docker-runc 或者启动容器报错等。需要针对容器里面的 docker-runc 改一下名称,用 runc 替换 docker-runc。最后,重新启动 docker 再启动失败的容器问题已解决!
Centos 升级 Docker 至最新版本 (镜像容器不丢失)
Centos 升级 Docker 至最新版本 (镜像容器不丢失) 本文详细指导如何在 CentOS 上安全升级 Docker,确保镜像和容器不受影响,包括卸载旧版本、添加 yum 源、安装新版本、修复启动错误并启用开机自启。Centos 升级 Docker 至最新版本 (镜像容器不丢失) Centos 升级 Docker 至最新版本 (镜像容器不丢失) 卸载旧版本的 Docker 安装需要的软件包 添加 Docker 的 yum 源 更新 yum 包 查看所有仓库中提供的 Docker 版本 安装新版本 Docker 或安装指定版本 启动 Docker 开启 Docker 开机自启 查看 Docker 版本 查看原有容器 如果启动容器报错 备份容器信息 更改/var/lib/docker/containers 目录中的文件参数,把 docker-runc 替换为 runc 重启 Docker 再次启动容器成功 Centos 升级 Docker 至最新版本 (镜像容器不丢失) 卸载旧版本的 Docker yum removedockerdocker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine 一键获取完整项目代码 bash 1 安装需要的软件包 yuminstall-yyum-utils device-mapper-persistent-data lvm2 一键获取完整项目代码 bash 1 添加 Docker 的 yum 源 #yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo#推荐阿里云 yum 源 yum-config-manager\--add-repo\http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 一键获取完整项目代码 bash 1 2 3 4 5 更新 yum 包 yum update 一键获取完整项目代码 bash 1 查看所有仓库中提供的 Docker 版本 yum list docker-ce--showduplicates|sort-r 一键获取完整项目代码 bash 1 安装新版本 Docker yuminstalldocker-ce docker-ce-cli containerd.io docker-compose-plugin 一键获取完整项目代码 bash 1 或安装指定版本 yuminstalldocker-ce-
FAQ
升级 Docker 引擎是否必须停止正在运行的容器?
通常情况下,升级 Docker 引擎需要重启 Docker 守护进程,这会导致容器暂时停止。虽然有些方法声称可以不停容器,但为了数据安全,建议备份后停止服务再升级。
升级后容器数据丢失怎么办?
升级前备份 `/var/lib/docker` 目录,升级后恢复该目录可保留数据。若使用数据卷,数据通常存储在卷中不受影响。
跨主版本升级需要注意什么?
需重点核查内核版本、containerd 兼容性、配置文件语法变更及插件兼容性,不可直接跳升,需阅读变更日志。