由未知权威签署的“docker pull”证书

新手上路,请多包涵

我试图从 docker 注册表中提取 docker 映像,但遇到以下问题:

 $ docker pull <docker registry>/<image name>/<tag>
Error response from daemon: Get <docker registry>/v1/_ping: x509: certificate signed by unknown authority

我尝试使用“curl”并收到类似的错误消息:

  curl performs SSL certificate verification by default, using a "bundle"
 of Certificate Authority (CA) public keys (CA certs). If the default
 bundle file isn't adequate, you can specify an alternate file
 using the --cacert option.

所以我下载了 CA 证书并使用以下命令导入到服务器(RedHat Linux 7):

 cp root_cert.cer /etc/pki/ca-trust/source/anchors/
update-ca-trust

导入根证书后,我可以看到 curl 工作正常,因为它不会抱怨证书错误,但是如果我使用 docker pull 我仍然有同样的问题。 docker 使用的 ca-cert 位置是否与 curl 不同?在这种情况下,如何解决 docker pull 的问题?

原文由 Chen Xie 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 786
2 个回答

您可能需要重新启动 docker 服务以使其检测操作系统证书的更改。

Docker 确实有一个额外的位置,您可以使用它来信任单个注册表服务器 CA。您可以将 CA 证书放在 /etc/docker/certs.d/<docker registry>/ca.crt 中。如果您在图像标签中指定端口号,请包括端口号,例如在 Linux 中。

 /etc/docker/certs.d/my-registry.example.com:5000/ca.crt

或在 Windows 10 中:

 C:\ProgramData\docker\certs.d\ca.crt

原文由 BMitch 发布,翻译遵循 CC BY-SA 4.0 许可协议

  • 首先创建一个空的json文件
  cat << EOF > /etc/docker/daemon.json
  { }
  EOF

  • 比运行以下命令添加证书
  openssl s_client -showcerts -connect [registry_address]:[registry_port] < /dev/null | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > /etc/docker/certs.d/[registry_address]/ca.crt

无需重启即可工作

或者

将证书导入系统,如

  • 将证书保存到文件中,就像上面的命令一样(端口很重要,不需要协议)
   openssl s_client -showcerts -connect [registry_address]:[registry_port] < /dev/null | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > ca.crt

  • 将其复制到 /usr/local/share/ca-certificates/
   sudo cp ca.crt /usr/local/share/ca-certificates/

  • 运行更新 CA 证书
  sudo update-ca-certificates

  • 重启码头!

原文由 mati kepson 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题