只要不删 /var/lib/docker,容器、镜像、卷、网络配置默认保留;升级本质是替换二进制和运行时组件,需严格遵循备份检查→停服卸载(不删数据目录)→安装新版本→验证驱动与功能→逐个启动旧容器的顺序。
只要不删 /var/lib/docker,容器、镜像、卷、网络配置默认都会保留。升级 docker engine 本质是替换二进制和运行时组件,不是重装系统——关键在操作顺序和兼容性把控。
备份与检查先行
别跳过这步,它是“无损”的前提:
- 执行
docker ps -a和docker volume ls记录所有容器名、状态、挂载卷名 - 用
docker inspect查看关键参数:端口映射、环境变量、卷路径、重启策略、网络模式 - 备份重要数据卷(尤其含数据库或配置):
docker cp :/data /backup/container-data-$(date +%F) - 确认当前版本:
docker version,重点看 Server 版本号和Storage Driver(如 overlay2 或 devicemapper)
停服务 + 卸载旧包(不碰数据目录)
卸载只清除程序文件,不自动删除 /var/lib/docker。CentOS/RHEL 系统执行:
sudo systemctl stop dockersudo yum remove -y docker docker-client docker-common docker-engine- ⚠️跳过
rm -rf /var/lib/docker——除非你明确要清空一切
Ubuntu/Debian 类似,用 apt remove --purge docker-ce docker-ce-cli containerd.io,同样不删数据目录。
安装新版本并验证驱动兼容性
推荐安装官方支持的 LTS 版本(如 24.0.x),避免跨主版本跳跃:
- 添加 Docker 官方源(或国内镜像源),再安装指定版本:
sudo apt install docker-ce=24.0.9 docker-ce-cli=24.0.9 containerd.io - 启动服务:
sudo systemctl start docker - 立刻检查:
docker info | grep "Storage Driver"——若仍为 overlay2,且docker ps -a能列出原有容器,说明数据层未损坏 - 运行一个测试容器:
docker run --rm hello-world,确认 daemon 基础功能正常
逐个启动旧容器并观察行为
不要直接 docker start -a 全量启动,尤其对有状态服务:
- 先挑一个非核心容器:
docker start,再docker logs看启动日志是否报错 - 常见异常包括:
Unknown runtime specified(需检查/etc/docker/daemon.json中runtimes配置)、overlay mount: invalid argument(内核版本过低或 selinux 限制,可临时设sudo setenforce 0测试) - 数据库类容器启动后,建议连接进去执行简单查询,确认数据可读写











