如何修复 docker-机器中过期的客户端证书
How to fix expired client cert in docker-machine
对每台机器进行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、病毒、奇怪的时钟问题等。None 已应用。我怎样才能使它们再次可用(通过 docker-machine
界面)?
对 Mac 使用 Docker,17.12.0-ce-49
更新 - 正如我在 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-机器创建新证书),移动配置、ssh 密钥和服务器证书(not 客户端证书),然后为每台机器发出重新生成。注意,这是破坏性和痛苦的。如警告所示,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
尝试:
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
...
我无法通过上述解决方案解决我的问题。所以我只是删除了我的机器和带有证书的相应文件夹,我能够正确地创建我的机器:
docker-machine rm -y $(docker-machine ls -q)
rm -rf ~/.docker/machine
对每台机器进行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、病毒、奇怪的时钟问题等。None 已应用。我怎样才能使它们再次可用(通过 docker-machine
界面)?
对 Mac 使用 Docker,17.12.0-ce-49
更新 - 正如我在 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-机器创建新证书),移动配置、ssh 密钥和服务器证书(not 客户端证书),然后为每台机器发出重新生成。注意,这是破坏性和痛苦的。如警告所示,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
尝试:
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
...
我无法通过上述解决方案解决我的问题。所以我只是删除了我的机器和带有证书的相应文件夹,我能够正确地创建我的机器:
docker-machine rm -y $(docker-machine ls -q)
rm -rf ~/.docker/machine