如何将Vagrant项目目录与现有的VirtualBox VM相关联?
不知何故,我的Vagrant项目已经从VirtualBox虚拟机中解脱出来,所以当我vagrant up
Vagrant的时候会导入基本框并创build一个新的虚拟机。
有没有办法将Vagrant项目与现有的VM重新关联? Vagrant如何在内部将Vagrantfile与VirtualBox VM目录相关联?
警告:下面的解决scheme适用于Vagrant 1.0.x,但不适用于 Vagrant 1.1+。
Vagrant使用与“Vagrantfile”相同目录下的“.vagrant”文件来跟踪虚拟机的UUID。 如果虚拟机不存在,该文件将不存在。 该文件的格式是JSON。 看起来像这样,如果一个虚拟机存在:
{ "active":{ "default":"02f8b71c-75c6-4f33-a161-0f46a0665ab6" } }
default
是默认虚拟机的名称(如果您不使用多虚拟机设置)。
如果您的虚拟机以某种方式失去联系,您可以做的是做VBoxManage list vms
虚拟机,它将列出VirtualBox知道的每个虚拟机的名称和UUID。 然后在.vagrant
文件所在的目录下手动创build一个.vagrant
文件并正确填写内容。
运行vagrant status
以确保stream浪汉获得适当的变化。
注意:这并不是由Vagrant官方支持的,Vagrant可以随时更改.vagrant
的格式。 但是,这是有效的stream浪者0.9.7,并将在Vagrant 1.0有效。
对于Vagrant 1.6.3,请执行以下操作:
1)在Vagrantfile所在的目录中,运行该命令
VBoxManage list vms
你会有这样的事情:
"virtualMachine" {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}
2)转到以下path:
cd .vagrant/machines/default/virtualbox
3)使用虚拟机的ID创build一个名为id的文件xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
4)保存文件并运行stream浪汉
高版本的解决scheme是相同的。
但首先你需要手动启动.vbox文件,以便它出现在VBoxManage list vms
然后你可以检查.vagrant/machines/default/virtualbox/id
来检查uuid是否正确。
有这个问题今天,我的.vagrant
文件夹丢失,发现有几个步骤比简单地设置ID:
-
设置id:
VBoxManage list vms
findid并在
{project-folder}/.vagrant/machines/default/virtualbox/id
请注意,如果设置在
Vagrantfile
,default
可能会有所不同,例如config.vm.define "someothername"
-
停止configuration机器:
在与
id
文件相同的目录中创build一个名为action_provision
的文件,将其内容设置为:1.5:{id}
将{id}
replace为在步骤1中find的id。 -
build立一个新的公钥/私钥:
Vagrant使用存储在
.vagrant/machines/default/virtualbox/private_key
中的.vagrant/machines/default/virtualbox/private_key
ssh进入机器。 你需要生成一个新的。ssh-keygen -t rsa`, name it `private_key
vagrant ssh
然后将private_key.pub
复制到/home/vagrant/.ssh/authorized_keys
。
今天用Vagrant 1.7.4更新同样的问题:
- 有用的线程在https://github.com/mitchellh/vagrant/issues/1755 ,特别是以下命令:
例如,将箱子“vip-quickstart_default_1431365185830_12124”配对为无用的。
$ VBoxManage list "vip-quickstart_default_1431365185830_12124" {50feafd3-74cd-40b5-a170-3c976348de27} $ echo -n "50feafd3-74cd-40b5-a170-3c976348de27" > .vagrant/machines/default/virtualbox/id
对于多VM设置,它看起来像这样:
{ "active":{ "web":"a1fc9ae4-5d43-49cb-be31-ab3c4f74745d", "db":"13503bc5-76b8-4c26-95c4-32435b372212" } }
您可以从用于创build这些虚拟机的Vagrant文件中获取虚拟机名称。 找这条线:
config.vm.define :web do |web_config|
在这种情况下,“web”是虚拟机的名称。
我在OSX El Capitan上使用Vagrant 1.8.1
当我的电脑重新启动时,我的虚拟机没有正确closures,所以当我试图vagrant up
它总是创build新的虚拟机。 这里没有解决scheme为我工作。 但是工作是什么ingmmurillo的答案变化
因此,不要根据运行VBoxManage list vms
的id创build.vagrant/machines/default/virtual_box/id
。 我不得不在.vagrant/machines/local/virtual_box/id
更新.vagrant/machines/local/virtual_box/id
我有一个class轮,基本上是这样对我来说:
echo -n `VBoxManage list vms | head -n 1 | awk '{print substr($2, 2, length($2)-2)}'` > .vagrant/machines/local/virtualbox/id
这假设第一个盒子是我需要从运行VBoxManage list vms
在Vagrant 1.9.1中:
我有一个名为“Ubuntu 16.04.1”的虚拟机中的虚拟机,所以我把它作为一个stream浪箱子打包:
vagrant package --base "Ubuntu 16.04.1"
回应…
==> Ubuntu 16.04.1: Exporting VM... ==> Ubuntu 16.04.1: Compressing package to: blah blah/package.box
我在马科斯,发现删除箱子上的锁解决了我的问题。
因为某些原因
vagrant halt
没有删除这些锁,在使用timemachine恢复.vagrant / machine / default / virtualbox中的所有设置后,删除锁,启动了正确的机器。
只剩下1个小问题,它被引导到grub,所以我不得不按一次进入,不知道这是否留下,但我很快就会发现。
我运行vagrant 1.7.4和virtualbox 5.0.2
这是从@ Petecoop的答案修改。
如果你还没有把箱子关掉,你可以逃跑。
然后列出你的virtualboxes: VBoxManage list vms
它会列出所有的虚拟机。 确定您想要还原到的方框,并在大括号之间抓取ID: {}
。
然后编辑项目ID文件: sudo nano /.vagrant/machines/default/virtualbox/id
将它replace为您从VB列表中复制的ID。
尝试vagrant reload
。
如果这不起作用,挂在SSH授权 (我偶然发现),从stream氓git复制不安全的公钥。 replace/.vagrant/machines/default/virtualbox/private_key
的内容。 当然备份原来的: cp private_key private_key-bak
。
然后运行vagrant reload
。 它会说这是确定的不安全的关键,并创build一个新的。
default: Vagrant insecure key detected. Vagrant will automatically replace default: this with a newly generated keypair for better security. default: Inserting generated public key within guest... default: Removing insecure key from the guest if it's present... default: Key inserted! Disconnecting and reconnecting using new SSH key... ==> default: Machine booted and ready!
你应该全部设置。