升级docker后需主动清理残留旧版依赖包及文件,包括docker-ce-cli、containerd.io、docker-selinux等;执行yum/dnf list installed | grep docker识别孤立包,逐层卸载并手动清除/etc/sysconfig/docker、旧systemd socket单元、bash补全脚本及权限异常的/var/run/docker.sock。

升级 Docker 后,旧版本的依赖包(如 docker-ce-cli、containerd.io、docker-selinux 等)常被保留,尤其在使用 yum/dnf 手动升级或切换仓库源时。这些包虽不运行,但占用磁盘、干扰新版本行为(如 systemd 单元冲突、SELinux 模块加载失败),需主动识别并清理。
确认残留的旧版 RPM 包
执行以下命令列出所有与 Docker 相关、但未被当前安装版本依赖的包:
-
查看全部 docker 相关已安装包:
yum list installed | grep docker或dnf list installed | grep docker -
筛选出“孤立”包(orphaned):
dnf repoquery --unneeded --latest-limit=1 | grep -E "(docker|containerd|runc)"(仅 dnf 支持;yum 需配合yum-plugin-aliases或人工比对版本号) -
检查低版本包是否仍存在:例如发现
docker-ce-24.0.7-1.el7已卸载,但docker-ce-cli-20.10.24-1.el7仍在,即为典型残留
安全移除无用依赖包
不建议直接 yum remove * 全删,应按依赖关系逐层清理:
- 先卸载明确废弃的 CLI 和运行时组件:
sudo dnf remove docker-ce-cli containerd.io runc(新版 Docker 通常自带兼容的docker-ce-cli和runc) - 若系统曾启用 SELinux 支持,检查并清理旧 SELinux 模块:
sudo semodule -l | grep docker→ 若输出类似docker 1.15.0的旧版本,执行sudo semodule -r docker再删除对应包docker-selinux - 对
docker-ce-rootless-extras等可选组件,若未启用 rootless 模式,可一并移除
清理非 RPM 管理的残留文件
RPM 卸载不会自动清理以下路径,需手动处理:
-
/etc/sysconfig/docker:旧版启动参数配置,新版统一由
/etc/docker/daemon.json管理,可直接删除 -
/usr/lib/systemd/system/docker*.socket:旧版 socket 激活单元(如
docker-containerd.socket),新版仅保留docker.socket,其余可删 -
/usr/share/bash-completion/completions/docker*:多个版本补全脚本可能共存,保留最新版(如
docker),删掉docker-*前缀的旧脚本 - /var/run/docker.sock:若服务已重启过,该文件会自动重建;若存在但属旧用户权限(如 root:docker),可删后让 daemon 重建
验证清理结果
执行三步验证确保无功能残留:
-
包层面:
rpm -qa | grep -E "(docker|containerd|runc)" | sort→ 应只显示当前版本主包及强依赖(如docker-ce-26.1.4、containerd.io-1.7.20) -
服务层面:
systemctl list-unit-files | grep docker→ 仅剩docker.service和docker.socket,状态为 enabled -
运行时层面:
docker version输出的 client/server 版本一致,且docker info | grep "Storage Driver"正常返回,说明无旧组件干扰











