为什么装docker的时候会出现什么NO_PUBKEY,无法验证key之类的错误信息,要装个gpg之类的东东

113 阅读2分钟

简单的说, docker安装时要用第三方apt库, apt安装时不允许来历不明的第三方库安装,必须是它认可的承认的。

所以经常会用到一行命令

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

这行命令的作用是:

「下载 Docker 官方提供的 GPG 公钥,并保存成 apt 可用的二进制密钥文件,用来验证后续从 Docker 仓库下载的软件包是否可信。」


一、各段含义拆解

命令段解释
curl -fsSL https://download.docker.com/linux/ubuntu/gpg静默下载 Docker 官方 GPG 公钥(纯文本)
sudo gpg --dearmor将 ASCII 格式的公钥转换成二进制格式(--dearmor = de-ASCII-armor)
-o /etc/apt/keyrings/docker.gpg输出到 /etc/apt/keyrings/docker.gpg,供 apt 验证软件包签名

二、为什么要这样做?

  1. apt 要求所有第三方仓库必须提供 GPG 签名,否则安装时会报 NO_PUBKEY 或「无法验证签名」。
  2. 把公钥放在 /etc/apt/keyrings/Ubuntu ≥20.04 推荐的新式做法(避免旧方法把密钥混在 /etc/apt/trusted.gpg 里造成全局信任)。

三、完整流程对照(Ubuntu 官方文档步骤)

# 1. 安装依赖
sudo apt update && sudo apt install -y ca-certificates curl gnupg

# 2. 创建密钥目录(Ubuntu 20.04+ 建议)
sudo install -m 0755 -d /etc/apt/keyrings

# 3. 下载并转换密钥(你问的这句)
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

# 4. 添加 Docker 仓库源(也使用 signed-by 指定密钥)
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# 5. 安装 Docker
sudo apt update && sudo apt install -y docker-ce docker-ce-cli containerd.io

一句话总结

这行命令就是「把 Docker 官方的 GPG 公钥下载并转换成 apt 能识别的格式,放在指定位置,用来验证后续从 Docker 仓库安装的 deb 包是否被篡改」——是添加第三方仓库前的标准安全步骤。