应先彻底清理docker相关apt源和gpg密钥,再刷新索引验证:删除/etc/apt/sources.list.d/下docker相关文件、检查并清除/etc/apt/sources.list中的docker条目、移除旧docker密钥、执行apt clean && apt update,确保apt policy docker-ce显示“没有安装候选”。

遇到依赖冲突,往往是因为系统里混着多个 Docker 源——比如 Ubuntu 自带的 docker.io 源、Docker 官方源,甚至可能还有 Snap 或第三方仓库留下的残留配置。这些源彼此版本不兼容,APT 就会卡在依赖解析阶段。清理软件源比单纯卸载包更关键,否则重装时问题照旧。
确认并删除冲突的 APT 源文件
Docker 相关源通常放在 /etc/apt/sources.list.d/ 下,命名常见为 docker.list、docker-ce.list 或带 repo 字样的文件。先列出所有疑似文件:
ls /etc/apt/sources.list.d/ | grep -i dockerls /etc/apt/sources.list.d/ | grep -i repo
发现后直接删除(无需备份,重装时会重新添加):
sudo rm -f /etc/apt/sources.list.d/docker.listsudo rm -f /etc/apt/sources.list.d/docker-ce.listsudo rm -f /etc/apt/sources.list.d/*docker*
检查主 sources.list 是否混入 Docker 条目
极少数情况下,有人会把 Docker 源手动写进 /etc/apt/sources.list。用以下命令快速筛查:
grep -i docker /etc/apt/sources.listgrep -i "download.docker.com" /etc/apt/sources.list
如果输出非空,用编辑器打开该文件,删掉对应行;或者用 sed 一键清除(谨慎执行):
sudo sed -i '/docker\|download\.docker\.com/d' /etc/apt/sources.list
清理 GPG 密钥防止签名验证干扰
旧的 Docker 官方密钥若未同步更新,也可能导致 apt update 报错或跳过正确源。查看已导入的 Docker 密钥:
apt-key list 2>/dev/null | grep -A1 "Docker"
若有输出,说明存在旧密钥,应移除:
sudo apt-key del "$(apt-key list 2>/dev/null | grep -A1 'Docker' | grep 'pub' | awk '{print $2}' | cut -d'/' -f2)" 2>/dev/null || true- 更稳妥的方式是:下载最新密钥后覆盖(官方推荐做法),而非仅删除旧密钥
刷新源列表并验证状态
删完源和密钥后,务必刷新本地索引:
sudo apt cleansudo apt update
运行后观察输出:不应再出现 docker 或 download.docker.com 相关行。再检查是否还有残留源生效:
-
apt policy docker-ce 2>/dev/null | head -5—— 应显示 “没有安装候选” 或 “无法定位” -
apt policy docker.io | head -3—— 可用来对比 Ubuntu 默认源是否仍可用(如需保留社区版可不删)











