重新启动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,再生证书也没有帮助。任何的想法?
谢谢。
只需启动docker机器,然后重新生成证书
docker-machine start <machine-name>
docker-machine regenerate-certs <machine-name>
它对我来说就像一个魅力。
我确保能够连接到我的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
分配给docker机器'default
',并重新生成一次证书。
然后每次调用docker-machine ls
时,它将为'default
'显示相同的IP。
试试这种方式/解决方法:
希望它也有助于在这里看到我的回应:https://github.com/docker/machine/issues/2808
在我的情况下,我的FortiClient
导致了这个问题。禁用后,docker-machine env default
再次正常工作。我建议你检查你的系统中是否有运行的防病毒程序。
对我来说,跑步
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的默认机器