一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

Docker 配置如何配置私有仓库的 TLS 证书信任

时间:2026-08-15 20:47:49 编辑:袖梨 来源:一聚教程网

关键是要将根证书ca.crt置于/etc/docker/certs.d/对应地址+端口目录,确保路径、文件名、权限严格匹配,并重启docker服务。

要让 Docker 客户端信任私有仓库的 TLS 证书,关键不是改系统 CA 存储,而是把根证书(ca.crt)放到 Docker 守护进程专属的信任目录里,并确保路径、文件名、权限和重启动作全部正确。

证书必须放在正确的目录路径下

Docker 守护进程严格按“访问地址+端口”匹配证书目录。你 pull 时用什么地址,目录名就必须完全一致:

  1. 如果执行 docker pull registry.example.com:443/myapp,目录应为:

    /etc/docker/certs.d/registry.example.com:443/

  2. 如果用 IP 访问,比如 docker pull 192.168.1.100:5000/app,目录必须是:

    /etc/docker/certs.d/192.168.1.100:5000/(不能省略 :5000,也不能写成 192.168.1.100

  3. 域名和端口大小写、协议前缀(如 https://)都不影响路径,但 DNS 解析必须通,且证书里的 SAN 或 CN 必须包含该域名或 IP

证书文件格式与权限要求

目录下只认一个固定名字的文件:ca.crt(全小写,无 .pem 后缀),内容必须是 PEM 格式:

  1. -----BEGIN CERTIFICATE----- 开头,-----END CERTIFICATE----- 结尾
  2. 如果是自签名证书或内网 CA 签发的证书,这里放的是根 CA 证书(不是服务器证书 server.crt)
  3. 文件权限需为 644:运行 sudo chmod 644 /etc/docker/certs.d/your-registry:port/ca.crt

配置后必须重启 Docker 守护进程

Docker 不会热加载证书,修改后不重启等于没配:

  1. 执行 sudo systemctl restart docker
  2. 验证是否生效:运行 docker pull your-registry:port/some-image,不再报 x509: certificate signed by unknown authority 即成功
  3. 可临时用 openssl s_client -connect your-registry:port -showcerts 检查服务端实际返回的证书是否匹配你放的 ca.crt

注意协议与登录方式的一致性

HTTPS 仓库和 HTTP 仓库的配置逻辑完全不同,混用会导致看似登录成功、实则拉取失败:

  1. 若仓库启用了 HTTPS(如 Harbor 或带 TLS 的 registry),docker login 必须加 https:// 前缀:

    docker login https://registry.example.com

  2. 若仓库是纯 HTTP 模式(如本地 registry:2 默认监听 5000),docker login 不能加协议,且需在 /etc/docker/daemon.json 中显式声明:

    "insecure-registries": ["your-registry:port"],再重启 dockerd

热门栏目