2017-05-17 20 views
0

当我做docker pull从使用/var/run/docker.sock运行泊坞窗(内码头工人码头工人)的容器里面,我得到这个错误:docker.sock用于docker pull的哪个ca.crt?

FATA[0000] Error response from daemon: v1 ping attempt failed with error: Get https://registry.com:5000/v1/_ping: x509: certificate has expired or is not yet valid. If this private registry supports only HTTP or HTTPS with an unknown CA certificate, please add `--insecure-registry registry.com:5000` to the daemon's arguments. In the case of HTTPS, if you have access to the registry's CA certificate, no need for the flag; simply place the CA certificate at /etc/docker/certs.d/registry.com:5000/ca.crt

所以我也跟着指示,并补充说目录内ca.crt,也将不安全选项添加到/etc/default/docker,但错误没有消失。

我想知道当我从容器内拉出时,/var/run/docker.sock命令在哪里查找证书。特别是当使用相同的配置(ca.crt在正确的文件夹中,并且不安全的选项也被添加)从外部(主机)拉出工作时。

+0

关闭我的头顶,拉应该从主机上运行的dockerd守护进程运行,而不是从容器内的客户端运行。 – BMitch

+0

@BMitch这样它会从主机上查找cert文件夹(/etc/docker/certs.d/registry.com:5000/ca.crt)吗? – Casper

+0

你使用旧的v1注册表吗? ca.crt必须包含整个链,从subCA到CA(如果是自签名或未知的)。如果它是一个已知的CA(安装了ca-certificates,对于基于Debian的发行版),您可以省略它,但它不会影响到那里。 –

回答

0

/var/run/docker.sock不是正在寻找证书的东西。这只是您用来与dockerd进行通信的套接字。当你做一个拉,你要求码头守护进程去谈论注册表。

你从哪里得到ca.crt文件?这真的是您的registry.com:5000服务器证书的签名证书吗?你把它放在dockerd运行的主机上的/et c/default/docker/registry.com:5000/ca.crt,还是放在容器里?

ca.crt文件属于守护程序正在运行的位置。仔细检查您在主机上的正确位置是否有正确的文件,并且应该解决问题。

+0

就像我刚才提到的,pull命令在主机级别工作,我把ca.crt(domain.crt)放在这里'/etc/default/docker/registry.com:5000/ca.crt'。如果pull命令来自主机级别,那么它如何在容器内部不起作用,但从外部起作用?这让我感到困惑。 – Casper

+0

您是否正在与容器内的同一个docker守护进程对话?或者,你是否在运行类似于dind的东西? – programmerq

+0

相同的码头守护程序,也有一个码头安装在容器内,但我没有使用,码头。这里使用的是袜子 – Casper

0

得到它现在的工作,解决方案是重新启动容器内的docker守护进程。实际上,我之前尝试过,但重启后Docker服务不断下降,这让我认为这是来自主机的docker服务。

我无法重新启动docker服务的原因是/var/run/docker.pid存在,阻止docker重新启动。所以我删除了该pid和码头重新启动成功。

相关问题