Vagrant 无法连接到虚拟机

Vagrant can't connect to the VM

EDIT6:提交了官方路径错误:https://github.com/mitchellh/vagrant/issues/7512

EDIT5:当我执行 vagrant destroyvagrant up 时,一切都很容易。但是当我关闭 VM 并重新打开它时(有一天你必须重新启动你的 PC),它不会再工作了。创建 VM 时 vagrant up 的顺序有问题,或者 VirtualBox 有问题。销毁和重建 VM 不是选项,导致数据库迁移,一切至少需要 ~30 分钟。无论哪种方式,不要在 WINDOWS 10.

上使用 VAGRANT

EDIT4:我降级到 Virtual Box 5.0.0.10,修复了错误的路径问题,但错误 Command not in installer 仍然存在。

EDIT3:当我进入 vagrant up --debug 时,我发现它在循环。它进入行

INFO subprocess: Starting process: ["C:/Program Files/Oracle/VirtualBox/VBoxManage.exe", "showvminfo", "8aaee3a3-806f-4
8ad-9928-91e2b7baba5d", "--machinereadable"]

然后它

INFO subprocess: Command not in installer, restoring original environment...

VM 的路径使用正斜杠而不是反斜杠。这是一个错误吗?有没有办法手动设置虚拟机的路径?我已将 C:\Program Files\Oracle\VirtualBox 放入我的路径中。

EDIT2:不要在 WINDOWS10 上使用 VAGRANT,它在很多方面都有问题,而且 VM 还没有针对 win10 进行优化,你会得到一堆您将无法解决的问题。还尝试了 Hashicorp 的 Otto,也没有用。撕。

编辑:好的,所以当我执行 vagrant destroyvagrant up 时,安装 10 分钟后,它就像一个魅力。但是在我重新启动我的 PC 或以任何方式注销后,Vagrant 无法连接到 VM,无论是使用私钥还是 login/password。这是一个错误吗?

当我vagrant up时,虚拟机正常启动,但 Vagrant 无法连接。它只说 Warning: Remote connection disconnect. Retrying... 当我尝试通过 vagrant ssh 连接时,我只得到 ssh_exchange_identification: read: Connection reset by peer。当我检查 VM 的 GUI 时,它正在等待登录,当我使用默认 login/password 登录时,它按预期工作,所以问题一定是 Vagrant 无法连接到 VM。

我试过了:

  1. 检查我的电脑是否支持虚拟化并检查它是否开启
  2. 尝试使用密码而不是密钥进行连接
  3. 配置网络适配器
  4. 关闭防火墙
  5. 彻底重新安装

我在 Windows10 上使用 Vagrant 1.8.1 和 VirtualBox 5.0.20。 这是我的 vagrant 文件:

VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|

  config.vm.box = "ubuntu/trusty64"

  config.vm.provider :virtualbox do |vb|
    vb.memory = 2048
    vb.gui = true
    vb.cpus = 2
  end


  config.vm.network :private_network, type: "dhcp"
  config.vbguest.auto_update = false

  config.ssh.insert_key = false

  config.vm.provision :shell, path: "bootstrap.sh"

end

[编辑 2016 年 6 月 17 日]
使用 Virtualbox 5.0.22 应该可以解决这个问题。

https://www.virtualbox.org/wiki/Changelog
https://www.virtualbox.org/ticket/15412

[下面是原始答案]
与我之前的回答相比,我现在认为我没有遇到与您在此处描述的相同的问题。但是我仍然认为你遇到了不同的变体问题。

根据从 Virtualbox 开发人员收到的反馈 https://www.virtualbox.org/ticket/15412 我了解到 Virtualbox 5.0.20 包括对 NAT 转发规则的更改以解决其他错误。保存 VM 并再次启动时,Virtualbox 现在会拔掉网线 5 秒。这应该会触发 DHCP 客户端请求新的租约。然后 Virtualbox 使用此信息来推断 IP 地址和 NAT 应该工作。

在我的特殊情况下,我遇到这个问题 Ubuntu 16.04 作为来宾虚拟机,而 Ubuntu 14.04 它工作。这向我表明 Ubuntu 14.04 上的 DHClient 在 Virtualbox 断开电缆连接后确实请求新租约,而 Ubuntu 16.04 不是这种情况。

为了验证你是否遇到了同样的问题,不知能否运行下面的测试告诉我。

  1. 登录到 Trusty VM 控制台(即当您 运行 VM 在前台时显示的控制台)
  2. 安装 'arping' (sudo apt-get -y install arping)
  3. 创建以下脚本'sendARP.sh'

    #!/bin/bash
    
    IFACE=$(ifconfig | grep 'Link encap:Ethernet' | awk '{print }')
    IP=$(ifconfig | grep -Eo 'inet (addr:)?([0-9]*\.){3}[0-9]*' | grep -Eo '([0-9]*\.){3}[0-9]*' | grep -v '127.0.0.1')
    
    arping -c 1 -i $IFACE $IP
    
  4. 使其成为可执行文件'chmod +x sendARP.sh'
  5. 保存可信虚拟机 (vagrant suspend)
  6. 从保存的状态启动您的 Trusty VM (vagrant up)
  7. 登录到 Trusty VM 控制台(即当您 运行 VM 在前台时显示的控制台)
  8. 运行脚本'sudo ./sendARP.sh'
  9. 测试是否可以从远程位置/Virtualbox 主机通过 SSH 连接

错误:

https://github.com/mitchellh/vagrant/issues/7306

https://www.virtualbox.org/ticket/15412