Docker pull 时出现 TLS 证书验证失败错误

本文适用于:

  • • Docker 20+ / 24+
  • • 国内网络环境
  • • 老旧 Linux 系统(CentOS 7 / Ubuntu 18.04)或最小化系统
  • • 企业网络环境(可能有 MITM 拦截)
  • • 遇到 TLS 证书验证失败错误

⚠️ 重要提示

这不是镜像仓库的问题,而是客户端系统缺少根证书或证书过期。

原因诊断树:

TLS 证书验证失败
  ├─ 系统缺少根证书(最常见)
  ├─ Docker 未使用最新证书
  ├─ 企业网络 MITM 拦截
  └─ Docker 版本过旧

✅ 推荐做法

优先更新系统 ca-certificates 包并重启 Docker。企业环境需要导入公司内部 CA 证书。

当您在拉取镜像时遇到 TLS 证书验证失败错误,Docker 无法验证镜像仓库的 SSL/TLS 证书,导致 docker pull 无法正常工作。

错误示例

docker pull xxx.xuanyuan.run/org/image:tag Error response from daemon: Get "https://xxx.xuanyuan.run/v2/": tls: failed to verify certificate: x509: certificate signed by unknown authority

错误含义

核心报错信息:

tls: failed to verify certificate: x509: certificate signed by unknown authority

这表示 Docker 客户端无法验证镜像仓库的 TLS/SSL 证书,因为证书是由客户端系统不认识的证书颁发机构(CA)签发的。

简而言之:客户端系统缺少根证书或证书链不完整 → 无法验证服务器证书 → TLS 握手失败 → docker pull 被阻止

常见原因

原因 1:客户端系统缺少根证书更新

这是最常见的原因,多见于以下系统环境:

  • • 老旧 Linux 系统(例如 CentOS 7 / Ubuntu 18.04)
  • • 最小化系统(如 Alpine / Debian-slim),默认不包含 CA 证书包
  • • 安装 Docker 时没有安装系统 CA 证书包

验证方法:检查系统证书数量

ls /etc/ssl/certs/ | wc -l

如果输出数量很少(几十个以内),说明系统缺少根证书包。

原因 2:Docker 守护进程未使用最新证书

Docker 守护进程(dockerd)不会自动使用系统证书更新,某些旧版本需要手动重载证书。

即使系统证书已更新,Docker 可能仍在使用旧的证书缓存。

原因 3:网络环境对 TLS 流量进行拦截(MITM)

某些公司网络、代理网关或 VPN 会对 HTTPS 流量进行中间人拦截(MITM),将证书链替换为公司内部 CA 签发的证书。

检查方法:查看实际证书颁发者

openssl s_client -connect xxx.xuanyuan.run:443 -showcerts

如果显示的 issuer 不是 Let's Encrypt、Google Trust、GlobalSign 等正规机构,而是公司域名或其他 CA,就是这个问题。

原因 4:Docker 版本过旧

旧版 Docker(低于 20.10)存在 TLS 兼容性问题,特别是对 ECC 证书支持不完全。

检查方法:

docker version

如果 Server Version 低于 20.10,建议升级 Docker。

解决方案

✅ 方案 1:更新系统根证书(推荐)

根据您的系统类型,执行相应的命令安装或更新 CA 证书包:

Debian / Ubuntu 系统:

sudo apt-get update
sudo apt-get install -y ca-certificates

CentOS / RHEL 系统:

sudo yum install -y ca-certificates
sudo update-ca-trust

Alpine 系统:

apk add --no-cache ca-certificates
update-ca-certificates

✅ 方案 2:更新证书后重启 Docker 服务

安装或更新证书后,需要让 Docker 重新加载证书:

sudo update-ca-certificates
sudo systemctl restart docker

重启后再次尝试拉取镜像。

✅ 方案 3:导入公司内部 CA 证书(适用于企业网络环境)

如果您处于使用了中间人拦截的企业网络环境,需要导入公司的根 CA 证书:

# 将公司 CA 证书复制到系统证书目录
sudo cp company-rootCA.crt /usr/local/share/ca-certificates/
# 更新证书
sudo update-ca-certificates
# 重启 Docker
sudo systemctl restart docker

注意:请联系公司 IT 部门获取正确的根 CA 证书文件。

✅ 方案 4:升级 Docker 到最新版本

如果您的 Docker 版本低于 20.10,建议升级到最新版本以获得更好的 TLS 支持:

可以使用轩辕镜像提供的一键安装脚本(支持 Docker 和 Docker Compose 一键安装并配置镜像源):

bash <(wget -qO- https://xuanyuan.cloud/docker.sh)

或参考:Linux Docker & Docker Compose 安装教程

⚠️ 临时方案:跳过 TLS 验证

编辑 /etc/docker/daemon.json,添加不安全的镜像仓库配置:

{ "insecure-registries": ["xxx.xuanyuan.run"] }

或者针对通用域名:

{ "insecure-registries": ["docker.xuanyuan.run"] }

保存后重载配置并重启 Docker:

sudo systemctl daemon-reload
sudo systemctl restart docker

总结:

  • ✅ TLS 证书验证失败通常是因为客户端系统缺少根证书或证书过期
  • ✅ 优先方案:安装/更新 ca-certificates 包并重启 Docker
  • ✅ 企业网络环境需要导入公司内部 CA 证书
  • ✅ 建议将 Docker 升级到 20.10 或更高版本
  • ⚠️ 临时跳过 TLS 验证的方案用于测试

本文由「xuanyuan.cloud」维护
专注国内 Docker / 镜像 / Registry 网络问题
内容基于真实用户环境与实测

免费获取在线技术支持请 提交工单,官方QQ群:13763429 。
轩辕镜像面向开发者与科研用户,提供开源镜像的搜索和访问支持。所有镜像均来源于原始仓库,本站不存储、不修改、不传播任何镜像内容。
官方邮箱:点击复制邮箱
©2024-2026 源码跳动