Docker 证书已过期或尚未生效。

4

我第一次安装 Docker,当使用默认的虚拟机或者叫做“docker-machine”(不确定具体名称),遇到了以下错误:

这是一个摘录。

Checking connection to Docker...
Error creating machine: Error checking the host: Error checking and/or regenerat
ing the certs: There was an error validating certificates for host "192.168.99.1
01:2376": x509: certificate has expired or is not yet valid
You can attempt to regenerate them using 'docker-machine regenerate-certs [name]
'.
Be advised that this will trigger a Docker daemon restart which might stop runni
ng containers.

我尝试使用docker-machine regenerate-certs [name] 命令,它似乎可以正常工作,至少没有出现错误。但是当我尝试运行Docker的hello world命令时,得到了以下结果。

docker: error during connect: Post http://%2F%2F.%2Fpipe%2Fdocker_engine/v1.39/c
ontainers/create: open //./pipe/docker_engine: The system cannot find the file s
pecified. In the default daemon configuration on Windows, the docker client must
 be run elevated to connect. This error may also indicate that the docker daemon
 is not running.
See 'docker run --help'.

我查找了类似的错误,并发现创建一个新的虚拟机或者docker-machine(我还不知道它该怎么称呼)解决了一些问题,但是默认虚拟机出现了同样的错误。

Error creating machine: Error checking the host: Error checking and/or regenerat
ing the certs: There was an error validating certificates for host "192.168.99.1
01:2376": x509: certificate has expired or is not yet valid
You can attempt to regenerate them using 'docker-machine regenerate-certs [name]

接下来我尝试了 docker-machine ls 命令,以便查看是否有帮助信息。以下是输出结果。

NAME      ACTIVE   DRIVER       STATE     URL                         SWARM   DO
CKER    ERRORS
default   -        virtualbox   Running   tcp://192.168.99.100:2376           Un
known   Unable to query docker version: Get https://192.168.99.100:2376/v1.15/ve
rsion: x509: certificate has expired or is not yet valid
first     -        virtualbox   Running   tcp://192.168.99.101:2376           Un
known   Unable to query docker version: Get https://192.168.99.101:2376/v1.15/ve
rsion: x509: certificate has expired or is not yet valid

我该如何修复它?


1
你能添加更多关于你的设置以及如何安装Docker和Docker-Machine的细节吗? - Mogi
我使用了DockerToolbox安装程序,我的设置只是自定义设置。 Docker版本18.09.3,构建774a1f4eee。 - Kwabena Yiadom
请说明您是在Linux还是Windows上运行此程序,如果是Windows,请说明其版本。 - Tms91
3个回答

8
尝试使用 docker-machine regenerate-certs --client-certs 命令。

谢谢,我需要 --client-certs - Sarke

0
也许你可以使用以下设置来编辑 /etc/docker/daemon.json 文件: { "insecure-registries":[ "0.0.0.0/0" ] } 然后重新启动服务: service docker restart 再试一次。

您的回答可以通过添加更多支持性信息进行改进,请[编辑]以添加进一步细节,如引用或文档,以便他人可以确认您的答案是否正确。您可以在帮助中心找到有关编写良好答案的更多信息。 - Community
不是的,这是一个Docker机器证书,而不是注册表证书。他们运行命令的地方没有Docker服务。 - BMitch

0
尝试这个:
在你的命令提示符中运行:
docker-machine ls

它将返回

NAME      ACTIVE   DRIVER       STATE     URL                         SWARM   DOCKER    ERRORS
<name>    <status> <driver>     <state>   <url>                       <swarm> <docker>  <errors>

获取您想要运行的机器的<name>(如果这是您第一次运行docker,则只有一个正在运行的机器,其名称为default,在此示例中我将称其为<name>

然后运行:

docker-machine kill <name>
docker-machine create <name>
docker-machine env <name>

最后一个命令将输出更多行,复制最后一行,我的情况是这样的:

# eval $("C:\my\path\to\docker-machine.exe" env <name>)

然后将其粘贴到命令提示符中不带#,然后运行它,问题现在应该已经解决了。

您可以通过运行docker-machine ls来检查它,如果问题已经解决,您应该在ERROR列下看不到任何消息。

此外,可能会出现以下行:

docker-machine kill <name>
docker-machine create <name>

如果您只有一个名为default的docker-machine存在,则不需要使用<name>


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接