如何在docker-machine中修复过期的客户端证书

rub*_*ful 12 docker docker-machine

为每台机器做一个docker-machine ls意想不到Unable to query docker version: Get https://x.x.x.x:2376/v1.15/version: x509: certificate has expired or is not yet valid的事情.

我最近没有做任何事情.看着SO,我尝试了一些常见的罪魁祸首,VPN,病毒,奇怪的时钟问题等等.如何修复使它们再次可用(通过docker-machine界面)?

使用Docker for Mac,17.12.0-ce-49

rub*_*ful 18

更新 - 正如我在2/14/2018评论的那样,这现在是docker-machine的一部分.
尝试:docker-machine regenerate-certs --client-certs

历史答案如下:


首先,docker-machine regenerate-certs不重新生成客户端证书.

openssl探索之后我发现它实际上是已过期的客户端证书.校验:

openssl x509 -in ~/.docker/machine/certs/cert.pem -text | grep "Not After"

我尝试使用相同的原位重新创建证书,ca.pem但它没有成功(对我而言).考虑到更多的时间和反复试验,我猜它最终会起作用.

最终工作的是备份整个目录,创建虚拟一次性机器(强制docker-machine创建新证书),移动配置,ssh密钥和服务器证书(不是客户端证书),然后为每台机器发出重新生成.注意,它具有破坏性和痛苦性.如警告所示,docker-machine regenerate-certs将在目标计算机上重新启动docker.虽然对我来说已经太晚了,但我希望看到更好的答案.

该过程看起来像:

#!/bin/bash

cd ~/.docker || exit
cp -R machine machine.bak
rm -rf machine
docker-machine create deleteme
docker-machine rm -rf deleteme
cd machine/machines || exit

for m in $(~/.docker/machine.bak/machines)
do
    cp -R "../../machine.bak/machines/$m" .
    rm "$m/cert.pem"
    rm "$m/key.pem"
    cp certs/cert.pem "$m"
    cp certs/key.pem "$m"
    docker-machine regenerate-certs -f
done
Run Code Online (Sandbox Code Playgroud)

  • 今天在`docker-machine` master 中修复了这个问题,当发布版本出来时,它应该可以用作`docker-machine --regenerate-certs --client-certs`。https://github.com/docker/machine/issues/4397 (2认同)
  • 这个美妙的建议对我有用!如果错误消息有正确的建议: ` 检查 TLS 连接时出错:检查和/或重新生成证书时出错:验证主机“192.168.99.100:2376”的证书时出错:x509:证书已过期或未过期但有效您可以尝试使用“docker-machine regenerate-certs [name]”重新生成它们。 (2认同)

sky*_*ren 9

尝试:

docker-machine regenerate-certs --client-certs <machine name>
Run Code Online (Sandbox Code Playgroud)

--client-certs很重要.

注意:

可以通过运行来检查有效性:

openssl x509 -in ~/.docker/machine/certs/cert.pem -text -noout | less
Run Code Online (Sandbox Code Playgroud)

结果如下:

 Certificate:
     Data:
     ...
     Signature Algorithm: sha256WithRSAEncryption
         ...
         Validity
             Not Before: Mar 12 09:03:00 2018 GMT
             Not After : Feb 24 09:03:00 2021 GMT
     ...
Run Code Online (Sandbox Code Playgroud)