几天来一直在努力解决这个问题。
尝试在 Windows 10 Pro 上实现 WSL 和 VirtualBox 设置。原因与问题无关,但使用 Hyper-V 不是一种选择。尝试实现:
https://www.paraesthesia.com/archive/2018/09/20/docker-on-wsl-with-virtualbox-and-docker-machine/
无论我使用Docker 工具箱要不就docker-machine
,结果总是相同的。“以管理员身份运行”只会在管理员帐户下创建虚拟机,而我也不想要。尝试rm
并重新创建虚拟机几十次。
基本上,无论是创建新机器还是尝试启动机器,我都会收到此错误:
(默认)等待 IP...
创建机器时出错:创建机器时驱动程序出错:等待 SSH 可用的重试次数过多。最后一个错误:超出最大重试次数 (60)
它仍然在创造机器,state
但是timeout
:
NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS
default virtualbox Timeout
我执行了docker-machine env default
并得到以下结果:
Error checking TLS connection: ssh command error:
command : ip addr show
err : exit status 255
output :
VM 确实出现在 VirtualBox 中,并且具有与我的其他工作 VM 相同的网络适配器(它们可以连接到互联网),但“适配器 2”除外。我的其他 VM 上没有这个适配器:
Docker VM 在终端中有以下内容:
此外,我尝试了以下建议,但问题并未得到解决。解决方案通常涉及重新创建虚拟机。
另外,我的主机在网络上位于 192.168.1.x。
https://github.com/docker/toolbox/issues/457
https://stackoverflow.com/questions/35958619/docker-terminal-waiting-for-an-ip
https://github.com/docker/machine/issues/3268
https://github.com/docker/machine/issues/4053
更新:
和VBoxManager.exe
位于docker-machine.exe
同一目录中。
答案1
总结docker-machine
当想要从主机连接客户机时,会显示“正在等待 IP” 。可能的原因:防火墙阻止了仅主机网络、DHCP 已禁用、IPv4 配置错误等。
要求:
- BIOS 中启用了 Intel VT-x
- 在 WSL 中安装有最新 Ubuntu(或其他 GNU/Linux 发行版)的 Windows 10 64 位
- VirtualBox 64 位已安装并且 Hyper-V 已禁用
- Docker 机器适用于 Windows 的 64 位(文件名为 docker-machine-Windows-x86_64.exe)
- 有关网络的初步知识和码头机器
环境:
- VirualBox Guest(也是Docker主机):启动到dockerDocker 的轻量级 GNU/Linux 映像
- VirtualBox 主机:Windows 10 64 位
- Docker 客户端:
docker-ce
在 Ubuntu WSL 中 - 仅主机接口中使用的 IPv4 范围:从 192.168.99.0 到 192.168.99.255,即 192.168.99.0/24,使用 DHCP已启用。您可以根据需要更改此设置,但DHCP 对于 Docker Machine 很重要
我关注了文章链接问题中提供。安装docker-ce
客户端在 Ubuntu WSL 中使用以下命令:
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt-get install docker-ce
docker run hello-world
# you’ll get a message like this:
# docker: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?.
现在回到 Windows 10 主机。分别按照以下步骤操作:
下载Docker 机器适用于 Windows 的 64 位。将
docker-machine-Windows-x86_64.exe
文件复制到 VirtualBox 安装文件夹中或添加VBOX_INSTALL_PATH
环境变量,以便 docker machine 可执行文件可以找到VBoxManage.exe
。从 VirtualBox 管理器窗口添加仅主机虚拟接口。然后在该窗口中设置所有必需的 IPv4 配置,或者从网络控制面板
ncpa.cpl
。 任何私有 IPv4 地址就可以使用了。以下是截图:在网络控制面板中:
- 在 VirtualBox 管理器窗口中:
在 Windows 防火墙中允许
192.168.99.0/24
IPv4 范围的入站和出站连接。同时VBoxHeadless.exe
在 Windows 防火墙中允许来宾操作系统中的 NTP 连接。然后运行此命令以在 VitualBox 中创建docker-host
虚拟操作系统:docker-machine.exe create docker-host
,它将安装和配置 VM 来宾操作系统。运行
docker-machine.exe env docker-host
命令以显示已配置的环境。将这些环境复制到 WSL 世界中或复制到.bash_profile
文件中,如下所示(变量会发生变化):
# These are example. Don't copy and paste.
export DOCKER_HOST=192.168.99.104:2376
export DOCKER_TLS_VERIFY=1
export DOCKER_CERT_PATH=/mnt/c/users/username/.docker/machine/machines/docker-host
export DOCKER_MACHINE_NAME=docker-host
export COMPOSE_CONVERT_WINDOWS_PATHS=true
在 WSL Ubuntu 中尝试docker run hello-world
。使用docker-machine.exe stop docker-host
停止 boot2docker VM。如果 Windows 防火墙阻止网络连接,则允许VirtualBox.exe
,VirtualBoxVM.exe
并VBoxHeadless.exe
在 Windows 防火墙出站规则中允许。还可以使用以下命令允许仅主机网络 IPv4 地址:
New-NetFirewallRule -DisplayName "Host_Only_Network" -Name "Host_Only_Network_In" -Direction Inbound -RemoteAddress 192.168.99.0/24 -Action Allow
New-NetFirewallRule -DisplayName "Host_Only_Network" -Name "Host_Only_Network_Out" -Direction Outbound -RemoteAddress 192.168.99.0/24 -Action Allow