为每台计算机执行docker-machine ls
a意外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
答案 0 :(得分:13)
更新 - 正如我在2014年2月14日评论的那样,这现在是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
重新创建 in situ ,但它没有用(对我来说)。考虑到更多的时间和反复试验,我猜它最终会起作用。
最终工作的是备份整个目录,创建虚拟一次性机器(强制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
答案 1 :(得分:8)
尝试:
docker-machine regenerate-certs --client-certs <machine name>
--client-certs
很重要。
注意:
可以通过运行来检查有效性:
openssl x509 -in ~/.docker/machine/certs/cert.pem -text -noout | less
结果如下:
Certificate:
Data:
...
Signature Algorithm: sha256WithRSAEncryption
...
Validity
Not Before: Mar 12 09:03:00 2018 GMT
Not After : Feb 24 09:03:00 2021 GMT
...
答案 2 :(得分:0)
上述解决方案无法解决我的问题。因此,我只删除了带有证书的计算机和相应的文件夹,便能够正确创建计算机:
docker-machine rm -y $(docker-machine ls -q)
rm -rf ~/.docker/machine