返回

Windows Docker 推送镜像失败?SSL 证书配置指南

windows

在 Windows 系统上使用 Docker 时,碰到过镜像推送到私有仓库失败的情况吗?你可能会看到“x509: certificate signed by unknown authority”这样的错误信息,这通常是由于 SSL 证书配置不当引起的。Windows 和 Linux 系统在证书存放路径方面存在差异,很容易踩坑。别担心,接下来我们就来详细说说如何在 Windows 上正确配置 Docker SSL 证书,让镜像推送顺畅无阻。

Docker 官方文档中提到的 /etc/docker/certs.d/HOSTNAME 路径,那是针对 Linux 系统的。Windows 系统的 Docker 守护进程压根儿不看这个路径。那么,Windows 系统的 Docker 证书到底应该放在哪里呢?

其实,证书的存放路径取决于 Docker 守护进程的运行方式。

第一种情况:你用的是 Docker Desktop

如果你是通过 Docker Desktop 使用 Docker 的,那么证书应该放在这里:

%USERPROFILE%\.docker\certs.d\HOSTNAME

%USERPROFILE% 指的是你的用户目录,比如 C:\Users\YourUserNameHOSTNAME 则是你的私有仓库地址,比如 docker-registry.lan

第二种情况:你用的是 Docker Toolbox

如果你用的是 Docker Toolbox,那么证书应该放在这里:

C:\Users\YourUserName\.docker\machine\machines\default\certs.d\HOSTNAME

同样,YourUserName 是你的用户名,HOSTNAME 是你的私有仓库地址。

配置步骤,很简单

  1. 首先,确定你的证书存放路径。根据你使用的 Docker 运行方式,选择上面两种路径之一。
  2. 然后,创建 certs.d 目录(如果它不存在的话)。
  3. 接着,在 certs.d 目录下,创建一个以你的私有仓库地址命名的文件夹,例如 docker-registry.lan
  4. 最后,把你的 SSL 证书文件(通常是 ca.crtclient.crt)复制到这个文件夹下。

重启 Docker

配置好证书后,别忘了重启 Docker 守护进程,让配置生效。

验证一下配置

重启 Docker 后,再试试把镜像推送到你的私有仓库。如果配置没问题,推送过程应该会很顺利,不会再出现证书错误了。

一些小建议

  • 你的 SSL 证书文件格式要正确,而且不能损坏。
  • 如果你用的是自签名证书,需要把它添加到 Windows 系统的受信任根证书颁发机构中。
  • 你可以通过运行 docker info 命令查看 Docker 守护进程的配置信息,确认证书路径是否正确。

通过以上步骤,你就能在 Windows 系统上正确配置 Docker SSL 证书,解决镜像推送时遇到的证书问题,保障镜像传输的安全。

不过要注意:

本文提供的方法适用于大多数情况,但由于 Docker 版本和环境配置的差异,可能存在一些特殊情况。如果以上方法解决不了你的问题,建议你参考 Docker 官方文档或者寻求其他技术支持。

常见问题解答

1. 为什么我在 Windows 上推送镜像到私有仓库时会遇到证书错误?

答:这是因为 Windows 系统的 Docker 守护进程不会读取 Linux 系统中默认的证书路径 /etc/docker/certs.d/HOSTNAME。你需要将证书放置在 Windows 系统对应的路径下。

2. 我使用 Docker Desktop,证书应该放在哪里?

答:证书应该放在 %USERPROFILE%\.docker\certs.d\HOSTNAME 路径下,其中 %USERPROFILE% 是你的用户目录,HOSTNAME 是你的私有仓库地址。

3. 我使用 Docker Toolbox,证书应该放在哪里?

答:证书应该放在 C:\Users\YourUserName\.docker\machine\machines\default\certs.d\HOSTNAME 路径下,其中 YourUserName 是你的用户名,HOSTNAME 是你的私有仓库地址。

4. 我配置好证书后,还需要做什么?

答:你需要重启 Docker 守护进程,使配置生效。

5. 如何验证证书配置是否正确?

答:你可以尝试再次推送镜像到你的私有仓库,如果推送成功,说明证书配置正确。你也可以通过运行 docker info 命令查看 Docker 守护进程的配置信息,确认证书路径是否正确。