如何将Vagrant项目目录与现有VirtualBox VM关联?
不知何故,我的Vagrant项目已经从它的VirtualBox VM中分离出来,这样当我如何将Vagrant项目目录与现有VirtualBox VM关联?,virtualbox,vagrant,Virtualbox,Vagrant,不知何故,我的Vagrant项目已经从它的VirtualBox VM中分离出来,这样当我Vagrant启动时Vagrant将导入基本框并创建一个新的虚拟机 有没有办法将Vagrant项目与现有VM重新关联? Vagrant如何在内部将Vagrant文件与VirtualBox VM目录关联?警告:以下解决方案适用于Vagrant 1.0.x,但不适用于Vagrant 1.1+ Vagrant使用与“Vagrantfile”位于同一目录中的“.Vagrant”文件来跟踪VM的UUID。如果VM不存在
Vagrant启动时
Vagrant将导入基本框并创建一个新的虚拟机
有没有办法将Vagrant项目与现有VM重新关联?
Vagrant如何在内部将Vagrant文件与VirtualBox VM目录关联?警告:以下解决方案适用于Vagrant 1.0.x,但不适用于Vagrant 1.1+ Vagrant使用与“Vagrantfile”位于同一目录中的“.Vagrant”文件来跟踪VM的UUID。如果VM不存在,则此文件将不存在。文件的格式是JSON。如果存在单个VM,则看起来是这样的:
{
"active":{
"default":"02f8b71c-75c6-4f33-a161-0f46a0665ab6"
}
}
default
是默认虚拟机的名称(如果未使用多VM设置)
如果您的虚拟机以某种方式被解除关联,您可以做的是执行VBoxManage list vms
,它将按名称和UUID列出VirtualBox知道的每个虚拟机。然后在与您的vagrant文件
相同的目录中手动创建一个.vagrant
文件,并正确填写内容
运行vagrant status
,确保vagrant获得了正确的更改
注意:这不是Vagrant的官方支持,Vagrant可能会随时更改
.Vagrant
的格式。但这从Vagrant 0.9.7开始有效,并且将对Vagrant 1.0有效。对于多VM设置,它将如下所示:
{
"active":{
"web":"a1fc9ae4-5d43-49cb-be31-ab3c4f74745d",
"db":"13503bc5-76b8-4c26-95c4-32435b372212"
}
}
"virtualMachine" {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}
您可以从用于创建这些虚拟机的文件中获取虚拟机名称。请看这一行:
config.vm.define :web do |web_config|
在这种情况下,“web”是vm的名称。使用更高版本的解决方案是完全相同的 但首先需要手动启动.vbox文件,以便它出现在
VBoxManage列表vms
然后,您可以检查
.vagrant/machines/default/virtualbox/id
以检查uuid是否正确。对于vagrant 1.6.3,请执行以下操作:
1) 在文件所在的目录中,运行命令
VBoxManage list vms
您将有如下内容:
{
"active":{
"web":"a1fc9ae4-5d43-49cb-be31-ab3c4f74745d",
"db":"13503bc5-76b8-4c26-95c4-32435b372212"
}
}
"virtualMachine" {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}
2) 转到以下路径:
cd .vagrant/machines/default/virtualbox
3) 创建一个名为id的文件,其id为您的虚拟机xxxxxxxx-xxxx-xxxx-xxxx-XXXXXXXXXXXXXX
4) 保存文件并运行vagrant up更新,今天vagrant 1.7.4出现同样的问题:
- 有用的线程在 特别是使用以下命令:
$ VBoxManage list
"vip-quickstart_default_1431365185830_12124" {50feafd3-74cd-40b5-a170-3c976348de27}
$ echo -n "50feafd3-74cd-40b5-a170-3c976348de27" > .vagrant/machines/default/virtualbox/id
我在macos上,发现移除盒子上的.锁解决了我的问题 出于某种原因
vagrant halt
没有移除这些锁,在使用timemachine还原.vagrant/machine/default/virtualbox中的所有设置后,移除这些锁,正确的机器启动
只剩下一个小问题,它被引导到grub中,所以我不得不按一下enter键,不知道这是否会继续,但我很快就会发现
我正在运行vagrant 1.7.4和virtualbox 5.0.2我在OSX El Capitan上使用vagrant 1.8.1 当我的计算机重新启动时,我的虚拟机没有正确关闭,所以当我尝试
vagrant up
时,它总是在创建新的虚拟机。这里没有解决方案对我有效。但真正起作用的是
因此,不要基于运行VBoxManage list vms
的id创建.vagrant/machines/default/virtualbox/id
。我必须更新.vagrant/machines/local/virtual\u box/id
我有一个单行程序,基本上为我做到了这一点:
echo-n`vboxmanagelist-vms | head-n1 | awk'{print substr($2,2,length($2)-2)}`>.vagrant/machines/local/virtualbox/id
这假设第一个框是我需要从运行
VBoxManage list vms
开始的框。今天,我的.vagrant
文件夹丢失,发现除了简单设置id之外,还有几个步骤:
VBoxManage list vms
在{project folder}/.vagrant/machines/default/virtualbox/id
中查找id并进行设置
请注意,如果在vagrant文件中设置了default
,则可能会有所不同,例如config.vm.define“someothername”
id
文件相同的目录中创建一个名为action\u provision
的文件,将其内容设置为:1.5:{id}
用步骤1中找到的id替换{id}
.Vagrant/machines/default/virtualbox/private_key
中的私钥通过ssh连接到机器中。您需要生成一个新的
ssh-keygen -t rsa
命名为私钥
vagrant ssh
然后将private_-key.pub
复制到/home/vagrant/.ssh/authorized_-key
中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
然后列出您的虚拟机盒:vboxmanagelistmvm
它会列出你所有的虚拟箱。确定要还原到的框,并在花括号之间抓取id:{}
然后编辑项目id文件:sudo nano.vagrant/machines/default/virtualbox/id
(从项目目录)
将其替换为从VBs列表复制的id
尝试流浪者重新加载
如果这不起作用,并挂起SSH授权(我在那里绊倒了),请从中复制不安全的公钥。替换/.vagrant/machines/default/virtualbox/private_key
的内容。当然,备份原始文件:cp private\u key private\u key-bak