检查TLS连接时出错:检查和/或重新生成证书时出错

时间:2016-01-06 19:17:01

标签: docker docker-machine

重新启动Windows后,我无法连接到在Oracle Virtual Box中运行的docker机器。 当我启动Docker QuickStart终端时,每件事看起来都很好,它就会出现,它会给我这样的信息:

docker is configured to use the default machine with IP 192.168.99.100
For help getting started, check out the docs at https://docs.docker.com

但是当我这样做时:

$ docker-machine ls
NAME      ACTIVE   DRIVER       STATE     URL   SWARM   DOCKER   ERRORS
default   -        virtualbox   Timeout

λ docker images
An error occurred trying to connect: Get http://localhost:2375/v1.21/images/json: dial tcp 127.0.0.1:2375: ConnectEx tcp: No connection could be made because the target machine actively refused it.

当我尝试重新初始化我的环境时,我得到:

λ docker-machine env default
Error checking TLS connection: Error checking and/or regenerating the certs: There was an error validating certificates for host "192.168.99.100:2376": dial tcp 192.168.99.100:2376: i/o timeout
You can attempt to regenerate them using 'docker-machine regenerate-certs [name]'.
Be advised that this will trigger a Docker daemon restart which will stop running containers.
BTW,再生证书也无济于事。 有什么想法吗?

感谢。

14 个答案:

答案 0 :(得分:10)

请尝试通过以下方式手动重新生成证书:

docker-machine --debug regenerate-certs -f default

并检查要修复的错误,然后重试:

docker-machine --debug env default

如果在ssh上失败,请将该命令复制并粘贴到终端,通过添加额外的-vv来查看问题是什么。

如果你有:

  

debug1:连接到地址127.0.0.1端口64368:连接被拒绝

然后您的计算机未运行(请docker-machine ls检查),请尝试:

docker-machine start

然后尝试通过以下方式ssh:

docker-machine -D ssh default

答案 1 :(得分:8)

在做了一些研究之后,我发现以下解决方法可以解决现在的问题:

  1. 开放网络和共享中心

  2. 点击更改适配器设置

  3. 查看您是否有任何已启用的适配器,例如VPN或VM Ware网络适配器。

  4. 尝试禁用它们并尝试再次连接到您的容器

  5. 如果在禁用其他适配器的情况下它无法正常工作,请重新启动电脑 - 就我而言,这对我有用。

答案 2 :(得分:3)

这对我有用:

  • 从我的虚拟机中删除了所有仅主机接口(VirtualBox => Preferences => Network =>仅限主机网络)。
  • rmdir.exe --ignore-fail-on-non-empty ~/.docker/
  • docker-machine start
  • docker-machine env
  • eval $("C:\Program Files\Docker Toolbox\docker-machine.exe" env default)(也在.bash_profile
  • 的末尾添加
  • docker run hello-world< - now rorking

灵感来自post here

答案 3 :(得分:1)

这对我有用。第一步与Hazhir提出的步骤类似,然后重新生成证书。

  1. 打开网络和共享中心。
  2. 点击Change Adapter Setting。
  3. 禁用所有活动的VMWare网络适配器。通常有解释“VirtualBox Host-Only Ethernet Adapter”。
  4. 运行docker-machine start
  5. 连接到您的容器
  6. 运行docker-machine env。如果你像我一样,那么你会得到以下错误:
  7.   

    检查TLS连接时出错:检查和/或重新生成错误   证书:验证主机证书时出错   “192.168.99.100:2376”:x509:证书对192.168.99.101有效,   不是192.168.99.100

    哪个好。现在我们需要做的就是运行

    docker-machine regenerate-certs -f default
    

    然后使用docker-machine env再次测试它。如果你得到:

    SET DOCKER_TLS_VERIFY=1
    SET DOCKER_HOST=tcp://192.168.99.100:2376
    SET DOCKER_CERT_PATH=C:\Users\Jay\.docker\machine\machines\default
    SET DOCKER_MACHINE_NAME=default
    REM Run this command to configure your shell:
    REM     FOR /f "tokens=*" %i IN ('docker-machine env') DO %i
    

    然后你就完全了。在我的情况下,我需要通过运行Docker Quickstart Terminal来启动我的虚拟机。

答案 4 :(得分:1)

我也有这个问题。执行docker-machine regenerate-certs <vm-name>无法解决问题。我在Google上搜索错误信息并找到下面的解决方案。

  • 在终端执行sudo ifconfig vboxnet0 up
  • 显示泊坞机状态:docker-machine ls
  • 现在STATEURL没问题。

但重启系统时此问题仍然存在。

我找到的

GitHub issues链接就在这里。

VirtualBox 5.1.24中似乎有bug

答案 5 :(得分:0)

我确保能够连接到我的docker机器的方式是assigning them a fixed IP(并且仅重新生成一次证书)(不需要重新启动)

之后,docker-machine ls始终有效。

我目前的剧本:
(将%PRGS%\dm\latest替换为机器上docker-machine.exe所在的路径)
(确保PATH包含latest /path/to/git/usr/bin,以便ssh等命令可用

> more dmvbf.bat
@echo off
setlocal enabledelayedexpansion
set machine=%1
if "%machine%" == "" (
        echo dmvbf expects a machine name
        exit /b 1
)
set ipx=%2
if "%ipx%" == "" (
        echo dmvbf x missing ^(for 192.168.x.y^)
        exit /b 2
)
set ipy=%3
if "%ipy%" == "" (
        echo dmvbf y missing ^(for 192.168.x.y^)
        exit /b 3
)

%PRGS%\dm\latest\docker-machine.exe ssh %machine% "sudo sh -c 'echo \"kill \$(more /var/run/udhcpc.eth1.pid)\" | sudo tee /var/lib/boot2docker/bootsync.sh >/dev/null'"
%PRGS%\dm\latest\docker-machine ssh %machine% "sudo sh -c 'echo \"ifconfig eth1 192.168.%ipx%.%ipy% netmask 255.255.255.0 broadcast 192.168.%ipx%.255 up\" | sudo tee -a /var/lib/boot2docker/bootsync.sh >/dev/null'"

%PRGS%\dm\latest\docker-machine ssh %machine% "sudo chmod 755 /var/lib/boot2docker/bootsync.sh"

%PRGS%\dm\latest\docker-machine ssh %machine% "sudo cat /var/run/udhcpc.eth1.pid | xargs sudo kill"

%PRGS%\dm\latest\docker-machine ssh %machine% "sudo ifconfig eth1 192.168.%ipx%.%ipy% netmask 255.255.255.0 broadcast 192.168.%ipx%.255 up"

例如:

dmvbf default 99 100
docker-machine regenerate-certs -f default

这会将192.168.99.100分配给泊坞机&#39; default&#39;,并重新生成证书一次。
然后,每次调用docker-machine ls时,它都会为&#39; default&#39;显示相同的IP。

答案 6 :(得分:0)

尝试这种方式/解决方法:

  • 首先确保在$ yourhome / .docker / machine / certs /文件夹下有ca.pem,cert.pem,key.pem,ca-key.pem,对于这些丢失的四个* .pem文件,你可以复制他们来自其他地方或者自己创造它们(这四个pem文件一开始肯定不正确)
  • 确保在bash_profile中正确设置了env,如: export DOCKER_HOST = tcp://192.168.99.100:2376 导出DOCKER_MACHINE_NAME =默认值 export DOCKER_TLS_VERIFY = 1 export DOCKER_CERT_PATH = / Users / johnwang / .docker / machine / machines / default
  • 重新运行cmd:docker-machine regenerate-certs default(可能在运行之前,需要重新打开docker终端) 在mac上的docker工具箱上试过,它可以工作。
  • 最后结果的一些日志: 检查TLS连接时出错:检查和/或重新生成证书时出错:验证主机证书的错误&#34; 192.168.99.100:2376&#34;:x509:由未知权限签署的证书 您可以尝试使用&#39; docker-machine regenerate-certs [name]&#39;重新生成它们。 请注意,这将触发Docker守护程序重启,这可能会停止运行容器。 ... ... johns-MacBook-Pro:证书johnwang $ docker-machine regenerate-certs默认值 重新生成TLS机器证书?警告:这是不可逆转的。 (是/否):y 重新生成TLS证书 等待SSH可用... 检测供应商...... 将证书复制到本地计算机目录... 将证书复制到远程计算机...... 在远程守护程序上设置Docker配置... johns-MacBook-Pro:证书johnwang $ docker-machine ls NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS default - virtualbox运行tcp://192.168.99.100:2376 v17.03.1-ce

希望它有所帮助 另见我的回复:https://github.com/docker/machine/issues/2808

答案 7 :(得分:0)

就我而言,我的FortiClient导致了这个问题。禁用后docker-machine env default再次正常工作。我建议你检查你的系统中是否有任何反病毒程序运行。

答案 8 :(得分:0)

对我来说,跑步

docker-machine --debug regenerate-certs -f name_of_your_vm

工作正常。

docker-machine version 0.16.1
virtualBox 6.0

还将docker配置为使用IP 192.168.99.100的默认计算机

答案 9 :(得分:0)

我有同样的错误。我是通过在网络防火墙中打开tcp端口2376修复的。

答案 10 :(得分:0)

对我有用的是来自docker-machine repo的this answer

docker-machine regenerate-certs --client-certs [name]

基本上,过期的是客户端证书。我从docker-machine收到的错误消息与您的错误消息类似(即,没有迹象表明需要重新生成客户端证书)。

答案 11 :(得分:0)

这里的答案都没有帮助我。我想用eval $(默认为docker-machine env)激活虚拟机的外壳时发生问题。

然后它试图访问已关闭的端口2376,所以我不得不通过ssh进入VM的外壳并激活以下UFW规则:

sudo ufw allow 2376

答案 12 :(得分:0)

我的问题的解决方案来自这里: https://github.com/docker/machine/issues/3845#issuecomment-271935924

引用:

<块引用>

如果你第一次安装 docker-machine 那么你就没有 托管将用于生成客户端的自签名 CA 证书和与您生成的机器一样多的服务器证书 稍后的。当您尝试创建机器时会生成该 CA,如果 CA 尚未创建。因此,如果您尝试生成多个服务器 并行(通过脚本),然后您将生成尽可能多的 自签名(根)CA 作为 docker createcommands,所有这些都是 写在同一个位置,似乎搞砸了 环境 例如将不同的 ca.pem 分散到远程机器上 与最终版本匹配,导致 cert.pem(主机身份) 由不再存在的前 ca.pem 签名......或其他任何东西 其他异常情况。

要修复它,首先您需要删除现有的 自签名 CA。这可以通过删除文件夹来完成 ~/.docker/machine/certs(注意:注意这将强制创建一个 新的自签名 CA 供 docker-machine 使用,并将产生您的 现有机器无法连接到守护程序)。这将使 您的 docker-machine 再次生成有效证书。那么,对于我 用例我正在前台创建第一台机器和所有 其余的都是并行完成的。这将导致创建一个 根自签名 CA 隔离,然后将用于进一步 docker-machine 创建命令。它就像一个魅力!

我之所以能够 ssh 到主机是因为有一个 每个主机生成不同的 sshing 密钥对 被这个咬了。

总而言之,这就是我最终要做的:

  1. 找出 docker-machine 正在运行的命令是什么。我将它与 gitlab-runner 一起使用,所以我必须在调试模式下运行 gitlab-runner 以查看它在 docker-machine 上运行的命令。

  2. 然后停止 gitlab-runner:gitlab-runner stop

  3. 然后删除证书:rm -rf ~/.docker/machine/certs

  4. 然后运行一个命令(从第 1 步开始)重新创建证书(请记住 - 这不起作用的原因是因为它试图多次创建它)

  5. 然后重新运行 gitlab-runner:gitlab-runner start

为我工作!

答案 13 :(得分:0)

对于在 2021 年使用 brew 的读者,在您以某种方式升级后 {{1 }}木桶

  1. 系统偏好设置... > 安全和隐私 >(用手指解锁)允许。
    <<您的计算机应该重新启动>>。
  2. virtualbox完成
相关问题