简单的说, 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 验证软件包签名 |
二、为什么要这样做?
- apt 要求所有第三方仓库必须提供 GPG 签名,否则安装时会报
NO_PUBKEY或「无法验证签名」。 - 把公钥放在
/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 包是否被篡改」——是添加第三方仓库前的标准安全步骤。