依赖冲突本质是系统存在不兼容旧包或多个源混用,应先彻底清理docker-ce、containerd、runc等残留组件及第三方仓库,再通过官方源指定版本精准安装,避免强制参数引发后续异常。

直接强制安装不是首选,关键是先清理再精准安装。依赖冲突本质是系统里已有不兼容的旧包或多个源混用,硬加 --force 或 --allowerasing 容易导致服务异常或后续升级失败。
彻底清理残留组件
旧版 Docker、containerd、runc、docker-cli 等哪怕只装过一次,就可能留下冲突文件:
- Ubuntu/Debian:运行
sudo apt purge docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin runc,再执行sudo rm -rf /var/lib/docker /etc/docker - CentOS/RHEL:用
sudo yum remove docker-ce docker-ce-cli containerd.io podman runc,并确认rpm -qa | grep -E "(docker|containerd|runc)"返回为空 - 删掉所有第三方仓库配置:
sudo rm -f /etc/yum.repos.d/docker*.repo /etc/apt/sources.list.d/docker*.list
锁定官方源并指定版本安装
不依赖默认 latest,而是查清可用版本后显式安装:
- Ubuntu:先更新索引
sudo apt update,再查版本apt list -a docker-ce,然后安装如sudo apt install docker-ce=5:24.0.7-1~ubuntu.22.04~jammy docker-ce-cli=5:24.0.7-1~ubuntu.22.04~jammy containerd.io=1.6.24-1 - CentOS:用
yum --showduplicates list docker-ce查版本,再安装指定版sudo yum install docker-ce-3:24.0.7-1.el7 docker-ce-cli-1:24.0.7-1.el7 containerd.io-1.6.24-3.1.el7 - 安装时加
--setopt=obsoletes=0(yum)或-o Dpkg::Options::="--force-confold"(apt)可绕过部分策略拦截,但仅用于已确认冲突包无实际用途时
跳过依赖检查的适用场景
仅当明确知道冲突包与当前用途无关,且愿意承担风险时才启用:
- yum/dnf:加
--allowerasing允许卸载冲突包,例如sudo yum install docker-ce --allowerasing - dnf(CentOS 8+/RHEL 8+):用
--setopt=install_weak_deps=False关闭弱依赖自动安装,避免引入干扰项 - 不推荐用
--nodeps—— 它会跳过所有依赖校验,极大概率导致 docker daemon 启动失败
验证安装结果是否干净
装完别急着 run,先确认环境没被污染:
- 检查二进制来源:
dpkg -S $(which docker) 2>/dev/null || rpm -qf $(which docker),应返回官方包名,而非 distro 自带包 - 验证动态链接:
ldd $(which dockerd) | grep "not found",输出为空才说明核心依赖完整 - 启动后运行
docker info | grep -E "(Server Version|containerd|runc)",确认各组件版本匹配官方兼容矩阵











