我试图从Docker注册表中提取Docker映像,但遇到以下问题:
$ docker pull <docker registry>/<image name>/<tag>
Error response from daemon: Get <docker registry>/v1/_ping: x509: certificate signed by unknown authority
Run Code Online (Sandbox Code Playgroud)
我尝试使用“ 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.
Run Code Online (Sandbox Code Playgroud)
因此,我使用以下命令下载了CA证书并导入到服务器(RedHat Linux 7)中:
cp root_cert.cer /etc/pki/ca-trust/source/anchors/
update-ca-trust
Run Code Online (Sandbox Code Playgroud)
导入根证书后,我可以看到curl它工作正常,因为它不会抱怨证书错误,但是,如果我使用,docker pull我仍然会遇到同样的问题。是docker使用不同于CA证书的位置curl?docker pull在这种情况下如何解决该问题?
小智 23
这是一个快速的解决方案:
docker.squadwars.org 的示例:
{
"insecure-registries" : ["docker.squadwars.org:443"]
}
Run Code Online (Sandbox Code Playgroud)
systemctl restart docker
Run Code Online (Sandbox Code Playgroud)
docker.squadwars.org 的示例:
mkdir -p /etc/docker/certs.d/docker.squadwars.org
Run Code Online (Sandbox Code Playgroud)
ex +’/BEGIN CERTIFICATE/,/END CERTIFICATE/p’ <(echo | openssl s_client -showcerts -connect docker.squadwars.org:443) -scq > /etc/docker/certs.d/docker.squadwars.org/docker_registry.crt
Run Code Online (Sandbox Code Playgroud)
m0z*_*4rt 15
对于 Ubuntu 20
sudo update-ca-certificates --fresh
openssl s_client -showcerts -verify 5 -connect registry-1.docker.io:443 < /dev/null 2>/dev/null | openssl x509 -outform PEM | tee ~/docker.crt
openssl s_client -showcerts -verify 5 -connect production.cloudflare.docker.com:443 < /dev/null 2>/dev/null | openssl x509 -outform PEM | tee ~/docker-com.crt
sudo cp ~/docker-com.crt /usr/local/share/ca-certificates/.
sudo cp ~/docker.crt /usr/local/share/ca-certificates/
sudo update-ca-certificates
sudo service docker restart
Run Code Online (Sandbox Code Playgroud)
Zer*_*ion 11
在浏览器中转到存储库的 URL。您可能必须接受所有安全提示。
单击地址栏上的挂锁,然后单击“证书”(在 Chrome 上)或“显示证书”(在 Safari 上)。
单击并按住证书的大纸图标并将其拖动到您喜欢的文件夹或桌面。
打开您的终端(确保将最后一个参数替换为您文件的位置):
security add-trusted-cert -d -r trustRoot -k ~/Library/Keychains/login.keychain-db ~/<<<somefolder>>>/<<<yourserver.cer>>>
Run Code Online (Sandbox Code Playgroud)
重启你的 docker 引擎。
/etc/docker/daemon.json比运行以下命令添加证书
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
Run Code Online (Sandbox Code Playgroud)无需重启即可工作
要么
导入证书到系统像
将证书保存到文件中,就像上面的命令一样(端口很关键,不需要协议)
openssl s_client -showcerts -connect <registry_address>:<registry_port> < /dev/null | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > ca.crt
Run Code Online (Sandbox Code Playgroud)将其复制到/ usr / local / share / ca-certificates /
cp ca.crt /usr/local/share/ca-certificates/
Run Code Online (Sandbox Code Playgroud)运行update-ca-certificates
sudo update-ca-certificates
Run Code Online (Sandbox Code Playgroud)您可能需要重新启动docker服务以获取它以检测OS证书中的更改。
Docker确实有一个额外的位置,您可以用来信任单个注册表服务器CA。您可以将CA证书放入其中/etc/docker/certs.d/<docker registry>/ca.crt。如果在image标签中指定了端口号,请添加端口号,例如
/etc/docker/certs.d/my-registry.example.com:5000/ca.crt
Run Code Online (Sandbox Code Playgroud)
小智 5
就我而言,错误出在“docker login”命令上。
我为我的 ubuntu 找到的解决方案:
我通过firefox下载了crt文件(url地址栏中的锁定图标)并保存:~/mydomain:1234.crt
在那之后 :
cp ~/mydomain:1234.crt /usr/local/share/ca-certificates/
update-ca-certificates
service docker restart
Run Code Online (Sandbox Code Playgroud)
对于使用 CentOS 7 的任何人来说,这对我有用:
sudo cp -p abc.crt /etc/pki/ca-trust/source
Run Code Online (Sandbox Code Playgroud)
sudo update-ca-trust extract
Run Code Online (Sandbox Code Playgroud)
sudo systemctl daemon-reload
sudo systemctl restart docker
Run Code Online (Sandbox Code Playgroud)
对我来说,我最终这样做是为了让它发挥作用:
sudo cp -p abc.crt /etc/pki/ca-trust/source/anchors
sudo update-ca-trust
sudo update-ca-trust extract
sudo systemctl daemon-reload
sudo systemctl restart docker
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
17951 次 |
| 最近记录: |