在使用 Ubuntu 24.04 (Noble Numbat) 系统进行日常运维时,执行 sudo apt update 命令后,部分用户可能会在终端输出中看到类似apt-key is deprecated的警告信息,甚至在同步 Docker 官方软件源时触发 NO_PUBKEY 错误。
W: https://download.docker.com/linux/ubuntu/dists/noble/InRelease: Key is stored in legacy trusted.gpg keyring (/etc/apt/trusted.gpg), see the DEPRECATION section in apt-key(8) for details.
虽然从系统运行层面来看,这些警告通常不会立即导致 Docker 容器无法启动,但它们代表了 Debian 系 Linux 发行版在软件包管理安全策略上的重大调整。对于追求系统清洁度与合规性的开发者而言,忽略这些警告不仅会影响运维体验,还可能在未来面临因密钥验证失败导致的无法更新软件包的问题。
![图片[1]-修复Ubuntu 24.04 Docker软件源密钥警告apt-key is deprecated问题解决办法-主题铺](https://cdn.zhutipu.com/wp-content/uploads/2026/03/20260308095957914.png/ztp)
本文将深入剖析该问题的技术成因,并提供一套基于 Ubuntu 24.04 环境的 Docker 软件源安全配置方案。
一、 警告背后的技术逻辑:为何 apt-key 被弃用
在早期的 Debian 和 Ubuntu 版本中,系统通过 apt-key 命令将第三方软件源的公钥统一存放在 /etc/apt/trusted.gpg 全局钥匙圈中。这种机制虽然便捷,但存在显著的安全隐患:全局钥匙圈中的任何一个密钥被攻击者利用,或者存在潜在的信任链污染风险,都可能影响到整个系统的软件包完整性验证。
随着 Ubuntu 24.04 对安全标准的进一步收紧,官方引入了更细粒度的密钥管理机制。现在的最佳实践要求每个第三方软件源(如 Docker、Google Cloud SDK 等)必须拥有独立的 .gpg 密钥文件,并明确通过 signed-by 参数在源配置文件中指定。这种设计将不同软件源的信任边界物理隔离开,即便某个软件源的公钥被泄露,攻击者也无法借此伪造其他软件源的包,极大地提升了系统的防御能力。
二、 为什么你的修复尝试可能会失败
在处理该问题时,许多开发者会陷入两个常见的技术误区:
- 盲目导出旧密钥:许多教程建议执行
apt-key export来导出旧密钥。但在 Ubuntu 24.04 的新规范下,这种做法仅仅是延用了旧的存放方式,并未真正实现密钥的按源隔离,依然会触发弃用警告。 - 网络源路径错误:这是导致
gpg: no valid OpenPGP data found报错的核心原因。当开发者尝试使用curl下载密钥时,由于忽略了镜像站的目录深度(例如直接请求了mirrors.aliyun.com的根目录而非具体的/docker-ce/linux/ubuntu/gpg路径),最终下载下来的往往是一个 HTML 格式的网页文件,而非真正的二进制公钥。GPG 工具在验证时,会因无法识别网页标签而报错。
三、 Ubuntu 24.04 Docker 软件源修复实战方案
为了彻底解决上述问题,建议采用如下步骤重新配置 Docker 软件源。以下方案以清华大学开源软件镜像站为例,其在国内具有极高的稳定性和更新频率。
第一阶段:清理环境与重置配置
在进行配置前,必须移除所有可能引发冲突的残留文件,以确保系统处于“干净”状态。请在终端执行:
# 移除之前可能错误下载的密钥
sudo rm -f /etc/apt/keyrings/docker.gpg
# 删除所有已知的错误配置源文件
sudo rm -f /etc/apt/sources.list.d/docker.list
sudo rm -f /etc/apt/sources.list.d/archive_uri-https_download_docker_com_linux_ubuntu-noble.list第二阶段:建立标准化存放目录
按照最新的 Debian/Ubuntu 打包规范,第三方公钥应当统一存放在 /etc/apt/keyrings/ 目录下。
sudo mkdir -p /etc/apt/keyrings第三阶段:下载并导入密钥
使用 curl 获取正确的 GPG 密钥文件。请确保您复制的是指向该文件具体的路径,而非镜像站的根目录。
curl -fsSL https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg该命令通过管道将下载的二进制流直接交给 gpg --dearmor 工具进行解包,生成系统能够识别的 .gpg 格式密钥文件。
第四阶段:注册软件源配置文件
使用 deb [arch=...] signed-by=... 的语法格式,将签名密钥与软件源绑定。这种写法明确指示了 apt 系统:仅使用刚才存放的那个特定密钥来验证从此源下载的软件包。
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null最后生成如下效果
![图片[2]-修复Ubuntu 24.04 Docker软件源密钥警告apt-key is deprecated问题解决办法-主题铺](https://cdn.zhutipu.com/wp-content/uploads/2026/03/20260308095823181.png/ztp)
第五阶段:验证与更新
最后,执行一次索引更新,观察输出是否已恢复正常,且不再有任何“deprecated”关键字或公钥失效的报错。
sudo apt update四、 常见问题解答 (FAQ)
Q:如果在更新时依然收到 NO_PUBKEY 警告该怎么办?
A:这通常意味着系统中存在其他被遗漏的旧配置文件。可以通过 grep -r "docker" /etc/apt/sources.list.d/ 查找所有包含 docker 字样的文件,逐一打开检查,确保每个源都添加了 signed-by=/etc/apt/keyrings/docker.gpg 参数。
Q:为什么我使用的腾讯云服务器,推荐使用清华大学镜像源?
A:实际上,腾讯云的内网镜像源与清华源同样高效。若您更倾向于使用腾讯云内网源,仅需将上述步骤中的 https://mirrors.tuna.tsinghua.edu.cn/docker-ce 替换为 https://mirrors.tencent.com/docker-ce 即可获得极佳的下载速度。
Q:这种新的配置方式是否会影响后续升级系统?
A:完全不会。这种基于 signed-by 的配置方式是符合 Debian 12 和 Ubuntu 24.04 安全标准的现代做法,不仅稳定,而且在跨版本升级时,系统能够更准确地处理第三方软件源的验证需求,避免旧版本升级后导致的库兼容性问题。
通过上述标准化的配置,您不仅能够彻底根除恼人的安装警告,更能在底层构建起符合现代安全标准的 Docker 运行环境,为后续的容器化部署任务打下坚实的基石。
















暂无评论内容