1. 问题背景与现象分析
最近在Ubuntu 24.04(代号Noble Numbat)上配置Docker环境时,不少用户遇到了一个典型问题:当尝试添加Docker官方仓库时,系统会抛出"GPG密钥缺失"的错误提示。这个错误通常表现为以下形式:
code复制W: GPG error: https://download.docker.com/linux/ubuntu noble InRelease: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY XXXXXXXXXXXXXXXX
E: The repository 'https://download.docker.com/linux/ubuntu noble InRelease' is not signed.
这个问题的本质是系统缺少验证Docker软件包真实性的GPG公钥。在Linux系统中,GPG密钥用于验证软件源的合法性,确保下载的软件包未被篡改。Ubuntu 24.04作为新发布的LTS版本,其默认密钥环可能尚未包含Docker的最新签名密钥。
提示:这个问题不仅限于Docker,任何第三方仓库的添加都可能遇到类似情况。理解其原理有助于解决其他软件源的验证问题。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 解决方案全流程
2.1 标准解决步骤
以下是经过实测的完整解决方案:
bash复制# 1. 更新本地软件包索引
sudo apt update
# 2. 安装必要的依赖
sudo apt install -y ca-certificates curl gnupg
# 3. 创建Docker的GPG密钥目录
sudo install -m 0755 -d /etc/apt/keyrings
# 4. 下载Docker官方GPG密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
# 5. 设置密钥文件权限
sudo chmod a+r /etc/apt/keyrings/docker.gpg
# 6. 添加Docker仓库源
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
noble stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# 7. 再次更新软件包索引
sudo apt update
2.2 关键步骤解析
步骤4的深层原理:
curl -fsSL:静默模式下载密钥,不显示进度信息gpg --dearmor:将ASCII格式的密钥转换为二进制格式,这是apt能识别的格式- 输出到
/etc/apt/keyrings/目录:这是Ubuntu 22.04+推荐的密钥存储位置
步骤6的架构变化:
较旧的教程可能会使用/usr/share/keyrings/目录或直接通过apt-key add命令添加密钥,但这些方式在Ubuntu 24.04中已被视为不推荐的做法。新方法明确指定了密钥路径(signed-by参数),更加安全和可管理。
3. 常见问题排查
3.1 密钥下载失败
如果遇到curl: (60) SSL certificate problem错误,可能是系统CA证书过期导致:
