Vagrant 卡在“等待 VM 启动”

Posted

技术标签:

【中文标题】Vagrant 卡在“等待 VM 启动”【英文标题】:Vagrant stuck in "Waiting for VM to Boot" 【发布时间】:2014-09-22 04:19:28 【问题描述】:

我想先提到这个问题,我确实已经查看了大多数(如果不是全部)流浪的“等待 VM 启动”故障排除线程:

我尝试过的方法包括:

    vagrant failed to connect VM

    https://superuser.com/questions/342473/vagrant-ssh-fails-with-virtualbox

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

    http://vagrant.wikia.com/wiki/Usage

    http://scotch.io/tutorials/get-vagrant-up-and-running-in-no-time

还有更多。

这是我设置我的 Vagrant 的方法:

注意:我们正在使用 Vagrant 1.2.2,因为我们目前没有时间将配置更改为新版本。我也在使用 VirtualBox 4.2.26。

    我的办公室有一个/official/ 文件夹,其中包含诸如Vagrantfile 之类的内容。在我的Vagrantfile 中有这些自定义设置:
  config.vm.box = "my_box"

  config.ssh.private_key_path = "~/.ssh/github_rsa"
  config.ssh.forward_agent = true
  config.ssh.forward_x11 = true
  config.ssh.max_tries = 300
  config.vm.provision :shell, :inline => "/etc/init.d/networking restart"

    我通过vagrant box add my_box absolute_path/package.box 安装了我们的自定义盒子(称为package.box),运行顺利。

    运行vagrant up,我会查看VirtualBox 的“预览”,它只会卡在登录页面。我的终端也只会说:Waiting for VM to boot. This can take a few minutes. 据我所知,这是一个 SSH 问题。或者我的私钥问题,尽管在我的Vagrantfile 中我明确指出了我的私钥位置。

有趣的笔记:

    在 VirtualBox GUI 中运行 dhclient,它说找不到命令。运行sudo dhclient eth0 是建议的修复方法之一。

    此修复:https://superuser.com/a/343775/298915 的“修改 /etc/rc.local 文件以在 exit 0 之前包含行 sh /etc/init.d/networking restart。”没有解决问题。

结论:

尝试重新安装所有东西,以为我搞砸了文件,但似乎并没有改善问题。我无法解决这个问题。有人能给我一些见解吗?

【问题讨论】:

【参考方案1】:

因此,经过大约 12 个小时的沮丧故障排除后,我能够(最终)启动虚拟机。

    Setup your private/public keys 使用提供的链接。我的盒子是Debian Linux 3.2.0-4-amd64,所以你必须使用/home/vagrant/.ssh/id_rsa.pub(以及私钥的相应id_rsa路径)而不是/root/.ssh/id_rsa.pub

    注意:确保您的文件具有正确的权限。使用ls -l path 进行检查,使用chmod 进行更改。你的机器可能没有/home/vagrant/.ssh/authorized_keys,所以用touch /home/vagrant/.ssh/authorized_keys生成那个文件。

    使用 VirtualBox GUI 启动 VM(通过 Vagrantfile boot-GUI 命令,或使用 VirtualBox 启动 VM)。出现提示时使用vagrantvagrant 登录。

    在 GUI 中,使用 sudo dhclient eth0 -v 手动启动 dhclient。 为什么默认关闭?我不知道。我在上面的教程中尝试wget 私钥/公钥时发现它已关闭,但无法。

    转到本地计算机的命令行并使用 vagrant reload 重新加载 vagrant。它应该启动,并且不再挂在“等待 VM 启动”。

这对我有用。尽管对于其他机器可能会有所不同,但无论出于何种原因 Vagrant 喜欢破坏。

建议:可以把这个保存为脚本,这样我们就不需要每次都手动执行了吗?

编辑:更新到最新版本的 Vagrant,您将永远不会再看到此问题。是时候了吧?

【讨论】:

感谢分享解决方案。只是为我节省了很多时间。在我的情况下需要注意的一件事:我第一次运行vagrant reload 时仍然在第一步被挂断。我在 VirtualBox GUI 中手动关闭了 VM,然后vagrant reload 工作了。不知道为什么。

以上是关于Vagrant 卡在“等待 VM 启动”的主要内容,如果未能解决你的问题,请参考以下文章

vagrant学习笔记

Vagrant:无法让 NFS 工作

3vagrant的3种网络连接方式

vagrant系列教程:vagrant的配置文件vagrantfile详解(转)

使用vagrant在virtual上创建centos7虚拟机

使用vagrant在virtual上创建centos7虚拟机