答案是GPG密钥冲突源于多源密钥混存或存放位置/格式不合APT新规,需彻底清理旧密钥(apt-key残留、重复.gpg文件、旧源文件),再按Ubuntu 22.04+规范将阿里云或官方GPG密钥以--dearmor格式存入/etc/apt/keyrings/并显式声明signed-by。

安装 Docker 时遇到 GPG 密钥冲突,本质是系统中存在多个来源的 Docker 公钥(比如官方源、阿里云镜像源、旧 apt-key 添加的密钥),或密钥存放位置/格式不符合当前 APT 的安全要求。Ubuntu 22.04+ 和 Debian 12+ 已弃用 apt-key,强制要求密钥以二进制 .gpg 格式存于 /usr/share/keyrings/ 或 /etc/apt/keyrings/,并由源配置文件显式指定 signed-by。冲突往往表现为:NO_PUBKEY XXXX、THE FOLLOWING SIGNATURES COULDN'T BE VERIFIED,或 apt update 直接跳过 Docker 源。
彻底清理旧密钥和残留源
避免新旧机制混用是解决冲突的前提。先清除所有可能干扰的旧配置:
- 删除通过
apt-key add添加的全局密钥:sudo apt-key del 7EA0A9C3F273FCD8(替换成你报错中的 key ID) - 移除旧的密钥文件(如果存在):
sudo rm -f /usr/share/keyrings/docker-archive-keyring.gpg /etc/apt/keyrings/docker.gpg - 删除旧的源配置:
sudo rm -f /etc/apt/sources.list.d/docker.list - 刷新缓存:
sudo apt clean && sudo apt update
使用标准方式添加可信密钥(推荐阿里云或官方源)
国内用户优先选阿里云镜像源,速度快且 GPG 密钥同步及时;若需官方源,确保 URL 与系统版本匹配(如 jammy 对应 Ubuntu 22.04,noble 对应 24.04):
- 创建标准密钥目录(兼容多数新版系统):
sudo mkdir -p /etc/apt/keyrings - 下载并转换密钥为 apt 可识别格式:
阿里云源(稳定):curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker-aliyun.gpg
官方源(需确认网络可达):curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker-official.gpg - 生成对应源配置(自动适配架构与系统代号):
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker-aliyun.gpg] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
验证与安装前关键检查
执行以下命令确认配置无误,再进行安装:
- 检查源是否被正确识别:
apt policy | grep docker—— 应显示类似https://mirrors.aliyun.com/docker-ce/linux/ubuntu jammy/stable的条目 - 确认密钥路径可读且格式正确:
ls -l /etc/apt/keyrings/docker-*.gpg(输出应为普通文件,非目录或链接) - 手动触发一次安全更新:
sudo apt update—— 此时不应再出现 GPG 错误,且会显示 “Hit” 或 “Get” Docker 源信息 - 安装前查看可用版本:
apt list -a docker-ce,确认列表中有候选包
如果仍提示密钥无效或签名失败
说明密钥文件损坏或源地址与密钥不匹配。此时不要重复执行导入命令,而是:
- 用
gpg --list-keys查看当前已导入的密钥指纹,比对是否与源配置中signed-by指向的文件一致 - 直接测试密钥有效性:
gpg --no-default-keyring --keyring /etc/apt/keyrings/docker-aliyun.gpg --list-keys - 临时禁用签名验证(仅调试用,不推荐长期启用):
在/etc/apt/sources.list.d/docker.list中将signed-by=...改为[arch=...,trusted=yes],但安装后务必恢复并修复密钥


















