解决 Docker 推拉镜像时的 certificate signed by unknown authority 错误
如果 Docker 不信任自签证书,就会出现 x509: certificate signed by unknown authority 错误,本文将教你如何解决。
要让 Docker 信任企业自签证书的镜像仓库,主要有两种方法:将证书添加到 Docker 的信任目录(推荐用于生产环境),或将仓库地址加入 insecure-registries 列表(仅限测试环境)。
方法一:将证书添加到 Docker 信任目录
这是最安全、推荐用于生产环境的方法。
# 创建目录(替换 <仓库地址> 和 <端口>,如 my-registry.example.com:5000 / harbor.example.com)
sudo mkdir -p /etc/docker/certs.d/<仓库地址>:<端口>
# 复制证书到该目录,并命名为 ca.crt
sudo cp /path/to/your/ca.crt /etc/docker/certs.d/<仓库地址>:<端口>/ca.crt
# 重启 Docker 服务
sudo systemctl restart docker最后文件位置形如 /etc/docker/certs.d/harbor.example.com/ca.crt 就是正确的,放好之后 Docker 才会认这张证书,此时拉取或推送将不再报错。
对于 Windows(非 Docker Desktop) 一般在 C:\ProgramData\docker\certs.d\
方法二:配置 insecure-registries
如果只是想快速测试,可以绕过证书验证。此方法不安全,不推荐在生产环境中使用。
编辑 Docker 配置文件 /etc/docker/daemon.json(Linux/macOS)或 C:\ProgramData\Docker\config\daemon.json(Windows):
{
"insecure-registries": ["<仓库地址>:<端口>"]
}保存后重启 Docker 服务:
sudo systemctl restart docker # Linux推荐用于 harbor 等快速最小测试。
特殊:Windows 版 Docker Desktop
Docker Desktop for Windows 会自动信任 Windows 证书存储区中所有用户信任的 CA 证书。因此,如果企业 SSL 证书已经在 Windows 系统中被用户信任,Docker Desktop 会自动继承该信任,无需额外配置。
特殊:Snap 安装的 Docker
目录在 /var/snap/docker/~current/etc/docker/certs.d/<仓库地址>:<端口>/ca.crt,其他一致。
Snap 真是构思,自己的机器建议尽快扔了
获取某个站点的证书
安装 openssl 后终端执行:
openssl s_client -showcerts -connect <仓库地址>:<端口> < /dev/null \
| sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p'小结
自建 Harbor 等镜像仓库时,在第一次部署时遇到 certificate signed by unknown authority 几乎是每个人都会踩的坑,希望这篇文章对您有所帮助。