Vagrant ssh 使用 VirtualBox 失败

40 virtualbox virtualization vagrant

到达 ssh 部分时 vagrant up 失败:

myterminal$ vagrant up
[default] VM already created. Booting if its not already running...
[default] Running any VM customizations...
[default] Clearing any previously set forwarded ports...
[default] Forwarding ports...
[default] -- ssh: 22 => 2222 (adapter 1)
[default] -- db2: 30003 => 30003 (adapter 1)
[default] Cleaning previously set shared folders...
[default] Creating shared folders metadata...
[default] Booting VM...
[default] Waiting for VM to boot. This can take a few minutes.
[default] Failed to connect to VM!
Failed to connect to VM via SSH. Please verify the VM successfully booted
by looking at the VirtualBox GUI.
Run Code Online (Sandbox Code Playgroud)

然后,当我随后尝试使用 vagrant ssh 或 vagrant reload 或类似方法进行连接时,我得到了这个:

myterminal$ vagrant reload
[default] Attempting graceful shutdown of linux...
SSH connection was refused! This usually happens if the VM failed to
boot properly. Some steps to try to fix this: First, try reloading your
VM with `vagrant reload`, since a simple restart sometimes fixes things.
If that doesn't work, destroy your VM and recreate it with a `vagrant destroy`
followed by a `vagrant up`. If that doesn't work, contact a Vagrant
maintainer (support channels listed on the website) for more assistance.
Run Code Online (Sandbox Code Playgroud)

请帮忙!我真的很难过。

亲切的问候,

卢克

小智 26

我在 Vagrant 网站的“入门”中给出的框也遇到了同样的问题。我下面的解决方案适用于本教程的框。

我在这里找到了解决方案:https : //github.com/mitchellh/vagrant/issues/391

  1. 在 VagrantFile 中,添加 gui 模式: config.vm.boot_mode = :gui
  2. vagrant up
  3. 在gui中,使用用户“vagrant”登录(密码=“vagrant”)
  4. 在 gui, run sudo /etc/init.d/networking restart, 在/etc/network/interfaces文件中,您现在必须有一个部分#VAGRANT-BEGIN [...]#VAGRANT-END
  5. vagrant reload在物理机上运行

  • 这对我有用,谢谢。我之前运行过 Vagrant,然后它停止使用新盒子。知道是什么原因造成的吗? (3认同)
  • 我确实重新启动了,但是在 /etc/network/interfaces 中我没有#VAGRANT-BEGIN [...]#VAGRANT-END 的部分,任何线索为什么?可以手动添加吗? (2认同)
  • 我得到`以下设置不应该存在:boot_mode` (2认同)
  • 在最新版本中,您必须为提供程序配置设置 v.gui = true (2认同)

小智 10

我在我的设置中看到了这个问题,并最终将其缩小到我在本地主机文件中添加了一个名称的事实。所以我有:

127.0.0.1 localhost myname myalias
Run Code Online (Sandbox Code Playgroud)

删除了myalias我添加的,它启动正常。感谢@saphirlazuli 提供了与网络相关的线索。


Daw*_*ony 6

这对我来说是一个间歇性问题,并且肯定似乎与网络有关。我在 Vagrant GitHub 问题#391#455 中找到了一些更有用的信息。我尝试在 VirtualBox 设置中删除我未使用的仅主机网络(建议作为 GitHub 问题之一的潜在修复),这似乎没有帮助。

以 gui 模式启动(如上一个答案中所述)是调试/修复问题的好方法。我发现这是因为无论出于何种原因,VM 在启动时都无法获取 IP 地址。从 GUI 模式开始,然后登录 (vagrant/vagrant) 并sudo dhclient在来宾操作系统中运行将检索 IP 地址,并且 Vagrant 设置过程将成功完成。

尽管如此,仍在寻找永久修复。

希望这可以帮助!

[编辑添加]:在GitHub 问题 #455中添加了一个有用的建议,其中涉及将以下配置添加到您的Vagrantfile

config.ssh.max_tries = 150
Run Code Online (Sandbox Code Playgroud)

这目前对我有用,并且似乎是有道理的,因为问题似乎与超时有关 - 增加尝试次数应该会增加 SSH 过程及时成功的可能性。首先这是一个间歇性问题,所以我会保留一段时间的判断,但手指交叉它会起作用!感谢 karel1980 建议修复。


Til*_*ill 5

如果vagrant up失败,我建议如下:

  1. 使用 gui 模式启动:这有助于查看映像是否损坏(或例如在配置开始之前它做了什么),config.vm.boot_mode = :gui在您的Vagrantfile
  2. 调试日志记录:使用debug运行配置,chef.log_level = :debug
  3. 重新打包盒子:有时你需要在其他一切运行之前安装一些东西 - 引导引导程序。这真的不可能,所以最简单的方法是在没有任何配置的情况下启动一个虚拟机,安装你需要的任何东西并重新打包盒子(vagrant box repackage foovagrant import foo然后添加foo你的Vagrantfile

注意:gui 模式可能有其他问题,例如对我来说,0.7.5当启用 gui 时,没有配置与 vagrant 一起工作。尽管如此,调试实际的盒子仍然很棒。