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

标签 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还不是对每台机器都有效的

我最近什么都没做。看着 SO,我尝试了一些常见的罪魁祸首,VPN,病毒,奇怪的时钟问题等。这些都不适用。如何修复使它们再次可用(通过 docker-machine 接口(interface))?

使用 Docker for Mac,17.12.0-ce-49

最佳答案

更新 - 正如我在 2018 年 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 "之后"

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

最终起作用的是备份整个目录,创建一个虚拟的一次性机器(强制 docker-machine 创建新证书),移动配置、ssh key 和服务器证书(不是客户端证书),然后为每台机器发出重新生成。注意,这是破坏性和痛苦的。如警告所示,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 - 如何修复 docker-machine 中过期的客户端证书,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48797261/

相关文章:

mysql - Docker MySQL连接DBeaver

docker - coredns pod 具有 CrashLoopBackOff 或 Error 状态

docker - 设置远程Docker服务器时出错

macos - 如何在 Mac 上更改 Docker 镜像安装目录?

VirtualBox:VERR_VM_DRIVER_NOT_INSTALLED

linux - 由于 ZScaler 和证书问题无法使用 docker

docker - 无法从Docker容器连接到外部Oracle DB

python-3.x - 在docker文件中使用特定的none-python基本图像设置特定的python版本

docker - 从 Windows 卸载 docker - Docker 工具箱

docker - Docker网站管理最佳实践