升级docker后不兼容主因是旧包、配置或数据残留,需按停服务→卸载全组件→清空数据与配置三步彻底清理。

升级 Docker 后出现不兼容问题,往往不是新版本本身有问题,而是旧版本的软件包、配置或数据残留导致冲突。尤其在 Ubuntu/Debian 或 CentOS/RHEL 系统中,多个 Docker 相关包(如 docker.io、docker-ce、containerd.io、podman-docker)共存时,极易引发依赖断裂、服务启动失败或命令冲突(比如 docker 命令指向旧二进制或报 “command not found”)。清理的关键是:先停用、再卸载、最后清空数据与配置。
停止所有 Docker 相关进程和服务
避免文件被占用导致删除失败或残留:
- 执行
sudo systemctl stop docker docker.socket containerd(Ubuntu/Debian/CentOS 通用) - 检查是否还有残留进程:
ps aux | grep -i 'docker\|containerd',如有则用sudo kill -9 PID强制终止 - 禁用开机自启:
sudo systemctl disable docker docker.socket containerd
彻底卸载所有 Docker 及关联包
不能只卸载主程序,必须清除所有可能冲突的组件:
-
Ubuntu/Debian:运行以下命令一次性清理全部相关包
sudo apt-get purge -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-ce-rootless-extras docker.io podman-docker containerd runc -
CentOS/RHEL:使用 yum 或 dnf 清理
sudo yum remove -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-ce-rootless-extras
再补一条:sudo yum remove -y docker* containerd*(通配符确保无遗漏) - 执行
sudo apt-get autoremove -y --purge(Debian系)或sudo yum autoremove -y(RHEL系),清理孤立依赖
删除残留数据目录和配置文件
这些目录若保留,新版本安装后可能复用旧数据,引发网络、存储或权限异常:
-
sudo rm -rf /var/lib/docker(镜像、容器、卷等全部数据,⚠️不可逆) -
sudo rm -rf /var/lib/containerd(containerd 运行时数据) -
sudo rm -rf /etc/docker(守护进程配置、daemon.json 等) -
sudo rm -f /var/run/docker.sock(Unix 套接字文件) -
sudo rm -rf /usr/local/bin/docker*(手动安装的二进制残留) - 检查并删除 systemd 服务文件:
sudo rm -f /lib/systemd/system/docker*.service /lib/systemd/system/containerd.service
验证是否清理干净
执行以下检查,确认无残留:
- 运行
docker --version或docker info—— 应提示command not found - 运行
dpkg -l | grep docker(Ubuntu)或rpm -qa | grep -i docker(CentOS)—— 输出应为空 - 检查关键路径:
ls /var/lib/docker /etc/docker—— 应提示No such file or directory - 运行
getent group docker—— 若返回结果,说明用户组仍存在,可用sudo groupdel docker删除
完成以上步骤后,系统就已恢复“干净状态”,可安全安装新版 Docker 或切换为其他容器运行时(如 Podman)。注意:所有操作前建议备份重要容器数据;若用于生产环境,建议在维护窗口期执行。











