如何切换Vagrant虚拟机?

7
我在使用Vagrant设置的虚拟机上工作时,意识到需要通过8000端口访问以测试Web界面。因此,我执行了vagrant halt以修改Vagrantfile并转发8000端口,然后保存文件并执行vagrant up启动该机器。但令我惊讶的是,Vagrant构建了一台全新的机器。现在,当我查看名为“VirtualBox VMs”的文件夹时,可以看到两个具有相同名称和不同长数字的虚拟机。我认为其中一个是我要启动的第一台包含所有软件包和设置的机器,而另一个是新的空机器。 如何切换回第一台机器,以便执行vagrant up时实际上启动该机器?如果可以,如何摆脱新的空机器?

CLI 应该有一种基于名称的方法来执行此操作... - Ciro Santilli OurBigBook.com
2个回答

8
我的理解是,每个Vagrant项目目录(包含Vagrantfile的目录)都与由vagrant在VirtualBox(默认提供程序)中管理的虚拟机相关联。通常以“baseboxname_id”的模式命名。
您的问题可能是由旧版Vagrant中的错误引起的。请确保您正在运行最新的Vagrant 1.3.3 + VirtualBox 4.2.18。或者,可能混淆了多个Vagrantfile(根据您的描述不太可能是这种情况)。
找出vagrant box的ID
  1. 更改目录到Vagrantfile所在的位置
  2. 查看以下内容= > /path/to/Vagrantfile/.vagrant/.vagrant/machines/default/virtualbox/id,您将获得一个类似于a90df491-4c25-4a07-be1a-be137908058c的ID。
注意:这是与由VirtulBox管理的Vagrantfile相关联的虚拟机的uuid。
摆脱新/空VM
现在您知道了uuid,您可以取消注册VM并将其删除= > VBoxManage unregistervm <uuid> --delete
重新关联第一个VM的Vagrantfile
  1. 获取由VirtualBox管理的VM名称和uuid列表
  2. 将id替换为/path/to/Vagrantfile/.vagrant/.vagrant/machines/default/virtualbox/id中第一个VM的uuid
  3. 启动第一个VM => vagrant up
  4. 完成!

好的,感谢你的回答 :) 我的vagrant版本是1.0.3-1ubuntu3,所以与你提到的那个版本(1.3.3)相比似乎有些过时了。但由于它是Ubuntu repo中最新的版本,所以我现在还会保持这样。补充一下你的答案,列出虚拟机的命令是VBoxManage list vms,有了这些信息,确实可以在vagrant文件夹内切换虚拟机。 - Bastian
从 1.1+ 版本开始,vagrant 改变了它的分发方式,从 gem 包转为特定于操作系统的包。对于 Ubuntu 用户,只需使用 .deb(自包含)软件包,它易于管理,并且值得尝试以获取新功能和错误修复。http://downloads.vagrantup.com/ - Terry Wang

0

如上所述,使用类似以下方式收集所需的虚拟机ID:

`vboxmanagevm list vms`

然后将 $vagrant_base_dir/.vagrant/machines/default/virtualbox/id 的内容替换为所需的 id。

上面没有提到的是,该文件需要是单行,没有换行符或回车符: 尝试类似以下的内容:

tr -d '\n' < id > id

我发现了这个小技巧 如何将Vagrant项目目录与现有的VirtualBox VM关联?

希望对任何发现它的人有所帮助。


1
"vboxmanagevm list vms" 对我没用。也许这个答案中有错别字,但是 "vboxmanage list vms" 可以用。 - wickywills

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接