最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
Docker 配置如何配置私有仓库的 TLS 证书信任
时间:2026-08-15 20:47:49 编辑:袖梨 来源:一聚教程网
关键是要将根证书ca.crt置于/etc/docker/certs.d/对应地址+端口目录,确保路径、文件名、权限严格匹配,并重启docker服务。
要让 Docker 客户端信任私有仓库的 TLS 证书,关键不是改系统 CA 存储,而是把根证书(ca.crt)放到 Docker 守护进程专属的信任目录里,并确保路径、文件名、权限和重启动作全部正确。
证书必须放在正确的目录路径下
Docker 守护进程严格按“访问地址+端口”匹配证书目录。你 pull 时用什么地址,目录名就必须完全一致:
- 如果执行
docker pull registry.example.com:443/myapp,目录应为:/etc/docker/certs.d/registry.example.com:443/ - 如果用 IP 访问,比如
docker pull 192.168.1.100:5000/app,目录必须是:/etc/docker/certs.d/192.168.1.100:5000/(不能省略:5000,也不能写成192.168.1.100) - 域名和端口大小写、协议前缀(如 https://)都不影响路径,但 DNS 解析必须通,且证书里的 SAN 或 CN 必须包含该域名或 IP
证书文件格式与权限要求
目录下只认一个固定名字的文件:ca.crt(全小写,无 .pem 后缀),内容必须是 PEM 格式:
- 以
-----BEGIN CERTIFICATE-----开头,-----END CERTIFICATE-----结尾 - 如果是自签名证书或内网 CA 签发的证书,这里放的是根 CA 证书(不是服务器证书 server.crt)
- 文件权限需为
644:运行sudo chmod 644 /etc/docker/certs.d/your-registry:port/ca.crt
配置后必须重启 Docker 守护进程
Docker 不会热加载证书,修改后不重启等于没配:
- 执行
sudo systemctl restart docker - 验证是否生效:运行
docker pull your-registry:port/some-image,不再报x509: certificate signed by unknown authority即成功 - 可临时用
openssl s_client -connect your-registry:port -showcerts检查服务端实际返回的证书是否匹配你放的 ca.crt
注意协议与登录方式的一致性
HTTPS 仓库和 HTTP 仓库的配置逻辑完全不同,混用会导致看似登录成功、实则拉取失败:
- 若仓库启用了 HTTPS(如 Harbor 或带 TLS 的 registry),
docker login必须加https://前缀:docker login https://registry.example.com - 若仓库是纯 HTTP 模式(如本地
registry:2默认监听 5000),docker login不能加协议,且需在/etc/docker/daemon.json中显式声明:"insecure-registries": ["your-registry:port"],再重启 dockerd