重新启动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,再生证书也无济于事。
有什么想法吗?
感谢。
答案 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)
在做了一些研究之后,我发现以下解决方法可以解决现在的问题:
开放网络和共享中心
点击更改适配器设置
查看您是否有任何已启用的适配器,例如VPN或VM Ware网络适配器。
尝试禁用它们并尝试再次连接到您的容器
如果在禁用其他适配器的情况下它无法正常工作,请重新启动电脑 - 就我而言,这对我有用。
答案 2 :(得分:3)
这对我有用:
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提出的步骤类似,然后重新生成证书。
docker-machine start
。docker-machine env
。如果你像我一样,那么你会得到以下错误:检查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
。STATE
和URL
没问题。但重启系统时此问题仍然存在。
我找到的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)
尝试这种方式/解决方法:
希望它有所帮助 另见我的回复: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 密钥对 被这个咬了。
总而言之,这就是我最终要做的:
找出 docker-machine 正在运行的命令是什么。我将它与 gitlab-runner 一起使用,所以我必须在调试模式下运行 gitlab-runner 以查看它在 docker-machine 上运行的命令。
然后停止 gitlab-runner:gitlab-runner stop
然后删除证书:rm -rf ~/.docker/machine/certs
然后运行一个命令(从第 1 步开始)重新创建证书(请记住 - 这不起作用的原因是因为它试图多次创建它)
然后重新运行 gitlab-runner:gitlab-runner start
为我工作!
答案 13 :(得分:0)
brew
的读者,在您以某种方式升级后 {{1 }}木桶virtualbox
。 完成