docker推送镜像到私有仓库报x509证书错误,需将私有仓库ca证书(pem格式)复制到/etc/docker/certs.d/:/ca.crt并重启docker服务。

在 Linux 中将镜像推送到私有 Docker 仓库时遇到 HTTPS 证书错误(如 x509: certificate signed by unknown authority),本质是 Docker 守护进程不信任你私有仓库使用的 TLS 证书。解决思路是让 Docker 守护进程识别并信任该证书,而不是禁用证书验证(不推荐)。
确认私有仓库证书类型
私有仓库若使用自签名证书、内网 CA 签发证书或 Let's Encrypt 域名证书,Docker 默认均不信任。需先确认证书来源:
- 如果是自签名证书:需把
.crt或.pem文件提供给 Docker - 如果是公司内网 CA 签发:需把该 CA 的根证书(通常是
ca.crt)加入信任链 - 如果是公网有效证书(如通配符证书),但域名与实际访问地址不一致(例如用 IP 访问却配了域名证书),也会报错——此时应改用域名访问,或重新签发匹配的证书
将证书添加到 Docker 守护进程信任库
Docker 守护进程(dockerd)有自己的证书信任目录,路径为:
/etc/docker/certs.d/:/ca.crt
注意:
- 地址必须与你 docker push 时使用的完全一致(如 192.168.1.100:5000 或 registry.example.com:443)
- 文件名必须是 ca.crt(不能是 cert.pem 或其他名字)
- 目录需由 root 创建,且权限建议为 644
操作步骤示例(以 192.168.1.100:5000 为例):
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
- 创建目录:
sudo mkdir -p /etc/docker/certs.d/192.168.1.100:5000 - 复制证书(假设证书文件为
my-registry-ca.crt):sudo cp my-registry-ca.crt /etc/docker/certs.d/192.168.1.100:5000/ca.crt - 重启 Docker 守护进程:
sudo systemctl restart docker
验证是否生效
重启后执行以下命令测试:
- 登录仓库:
docker login https://192.168.1.100:5000(输入用户名密码) - 推送镜像:
docker push 192.168.1.100:5000/myapp:latest
若不再提示证书错误,说明配置成功。也可临时加 -v 参数查看详细日志:docker --debug push ...,观察是否跳过证书校验环节。
常见踩坑点
-
证书格式不对:确保
ca.crt是 PEM 格式(以-----BEGIN CERTIFICATE-----开头),不是二进制 DER 或带私钥内容 -
目录名不匹配:比如你用
docker push registry.local:443,但证书目录建成了/etc/docker/certs.d/registry.local/ca.crt(缺端口)——必须含端口,即使默认 443 也要显式写出 -
证书未包含完整信任链:某些私有 CA 需要中间证书。可将根 CA + 中间证书合并为一个
ca.crt(顺序:根证书在前,中间证书在后) -
客户端和服务端时间不同步:证书有效期校验失败也会报类似错误,用
date检查系统时间是否准确










