Docker:获取https://registry-1.docker.io/v2/: x509:由未知机构签名的证书

uajslkp6  于 2023-05-16  发布在  Docker
关注(0)|答案(2)|浏览(279)

当我尝试提取docker镜像时,我遇到了一个错误。我们已经设置了代理,在我们的组织中,我们有显式的代理,所以要访问外部服务器,我们不能不设置它。

[root@DX2821 city]# docker pull hellow-world

使用默认标记:最新
来自守护程序的错误响应:
获取https://registry-1.docker.io/v2/:x509:由未知机构签署的证书

pqwbnv8z

pqwbnv8z1#

我在公司也遇到了同样的问题。
我们也有代理人。为了监控我们的https连接以避免恶意软件,我们的代理为站点和代理之间的安全连接动态创建证书。然后在代理和网站之间进行另一个安全连接。该消息指示代理生成的证书由未知的颁发机构签名:生成证书的“假授权”。
为了解决这个问题,我不得不在/usr/share/ca-certificates(用于Linux工作站)中安装这个“假权威”的根证书,然后:

> update-ca-certificates
nukf8bse

nukf8bse2#

为了扩展le flingue的答案,以下是如何在Ubuntu中一步一步地做到这一点:
您可以运行以下命令:

openssl s_client -connect registry-1.docker.io:443 -showcerts

它显示了所有的证书。复制以下列行开头和结尾的所有部件(包括开始和END CERTIFICATE行):

-----BEGIN CERTIFICATE-----
-----END CERTIFICATE-----

在/usr/local/share/ca-certificates/中创建尽可能多的文件,并将开始证书和结束证书部分粘贴到其中。作为一个例子,我有三个这样的部分,所以我创建了以下文件:

sudo nano /usr/local/share/ca-certificates/proxy1.crt
sudo nano /usr/local/share/ca-certificates/proxy2.crt
sudo nano /usr/local/share/ca-certificates/proxy3.crt

如何命名证书并不重要。唯一重要的是内容。在你复制了文件中的所有这些部分后,你可以运行以下命令:

sudo update-ca-certificates

它应该为您提供以下信息:

Updating certificates in /etc/ssl/certs...
rehash: warning: skipping ca-certificates.crt,it does not contain exactly one certificate or CRL
3 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d...
done.

请注意,这还没有将证书更新到Docker中。你必须启动和停止Docker守护进程。快跑

sudo service docker stop
sudo service docker start

最后,Docker应该能够找到证书。所以现在你可以跑了

docker pull hello-world

相关问题