Docker 在启动或创建新机器时“等待 IP”

Docker 在启动或创建新机器时“等待 IP”

几天来一直在努力解决这个问题。

尝试在 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 地址就可以使用了。以下是截图:

  • 在网络控制面板中:

IPv4 网络控制面板

  • 在 VirtualBox 管理器窗口中:

仅主机网络配置

  • 在 Windows 防火墙中允许192.168.99.0/24IPv4 范围的入站和出站连接。同时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.exeVirtualBoxVM.exeVBoxHeadless.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

相关内容