如何将 Vagrant 项目目录与现有的 VirtualBoxVM 关联?

不知怎么的,我的 Vagrant 项目已经与它的 VirtualBox VM 分离,所以当我 vagrant up的 Vagrant 将导入基本框并创建一个新的虚拟机。

有没有办法将 Vagrant 项目与现有的 VM 重新关联起来? Vagrant 如何在内部将 Vagranfile 与 VirtualBoxVM 目录关联?

62655 次浏览

警告: 下面的解决方案适用于 Vagrant 1.0.x,但适用于 没有 Vagrant 1.1 + 。

流浪汉使用。“流浪者”文件在同一目录作为您的“流浪者文件”跟踪您的虚拟机的 UUID。如果 VM 不存在,则此文件将不存在。该文件的格式为 JSON。如果存在一个 VM,它看起来是这样的:

{
"active":{
"default":"02f8b71c-75c6-4f33-a161-0f46a0665ab6"
}
}

default是默认虚拟机的名称(如果不使用多虚拟机设置)。

如果你的虚拟机已经脱离关联,你可以做的就是做 VBoxManage list vms,它会列出 VirtualBox 知道的每个虚拟机的名字和 UUID。然后在与 Vagrantfile相同的目录中手动创建一个 .vagrant文件,并正确填写内容。

运行 vagrant status以确保 Vagrant 选择了正确的更改。

注: 这不是流浪汉官方支持的,流浪汉可以随时改变 .vagrant的格式。但是这在流浪者0.9.7中是有效的,在流浪者1.0中也是有效的。

对于多虚拟机设置,应该是这样的:

{
"active":{
"web":"a1fc9ae4-5d43-49cb-be31-ab3c4f74745d",
"db":"13503bc5-76b8-4c26-95c4-32435b372212"
}
}

你可以从 Vagrantfile 获得创建这些虚拟机的虚拟机名称:

config.vm.define :web do |web_config|

“ web”是本例中 vm 的名称。

上层版本的解决方案是完全相同的。

但是首先需要手动启动. vbox 文件,以便它出现在 VBoxManage list vms

然后您可以检查 .vagrant/machines/default/virtualbox/id来检查 uuid 是否正确。

对于 流浪汉1.6.3,请执行以下操作:

1)在 Vagrantfile 所在的目录中,运行下面的命令

VBoxManage list vms

你会得到这样的东西:

"virtualMachine" {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}

2)走下列路线:

cd .vagrant/machines/default/virtualbox

3)创建一个名为 身份证的文件,ID 为 VM xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx

4)储存档案并执行 流浪汉

今天用流浪者1.7.4更新同样的问题:

  • 在 href = “ https://github.com/mitchellh/vasrant/questions/1755”> https://github.com/mitchellh/vagrant/issues/1755有用的线程 特别是下面的命令:

例如,将“ vip-Quick start _ 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

我正在研究 macos,发现移除箱子上的. 锁解决了我的问题。

出于某种原因

vagrant halt

没有移除这些锁,并恢复了我的所有设置后,在。移动/机器/默认/虚拟机使用时间机器,移除锁,正确的机器启动。

只有一个小问题仍然存在,它引导到幼虫,所以我不得不按回车键一次,不知道这是否停留,但我很快就会发现。

我正在运行流浪者1.7.4和虚拟机5.0.2

我在 OSX El Capitan上使用 流浪者1.8.1

当计算机重新启动时,我的 vm 没有正确关闭,所以当我尝试 vagrant up时,它总是在创建新的 vm。这里没有解决办法。但真正起作用的是 Ingmmurillo 的回答的变异

因此,我必须更新 .vagrant/machines/local/virtual_box/id中的 id,而不是根据运行 VBoxManage list vms的 id 创建 .vagrant/machines/default/virtualbox/id

我有一个专门为我准备的一行程序:

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文件夹不见了,我发现除了简单地设置 id 之外还有几个步骤:

  1. 设置 ID:

    VBoxManage list vms
    

    找到 id 并在 {project-folder}/.vagrant/machines/default/virtualbox/id中设置。

    注意,如果在你的 Vagrantfile中设置,例如 config.vm.define "someothername"default可能会有所不同。

  2. 停止机器供应:

    在与 id文件相同的目录中创建一个名为 action_provision的文件,将其内容设置为: 用步骤1中找到的 id 替换 {id}1.5:{id}

  3. 设置新的公钥/私钥:

    Vagrant 使用存储在 .vagrant/machines/default/virtualbox/private_key中的私钥 ssh 进入机器。

    ssh-keygen -t rsa
    

    命名为 private_key

    然后将 private_key.pub复制到 /home/vagrant/.ssh/authorized_keys

在《流浪者》1.9.1中:

我在 Virtual Box 中有一个名为“ Ubuntu 16.04.1”的虚拟机,所以我把它打包成了一个流浪盒子:

vagrant package --base "Ubuntu 16.04.1"

回应是..。

==> Ubuntu 16.04.1: Exporting VM...
==> Ubuntu 16.04.1: Compressing package to: blah blah/package.box

这是从 @ Petecoop 的回答修改过来的。

如果还没有关闭盒子,请运行 vagrant halt

然后列出您的虚拟机: VBoxManage list vms

它会列出你所有的虚拟机。确定要恢复到的框,并在大括号之间抓取 id: {}

然后编辑项目 ID 文件: sudo nano .vagrant/machines/default/virtualbox/id(来自项目目录)

将其替换为您从 VB 列表中复制的 id。

试试 vagrant reload

如果这不起作用,并且挂起在 SSH 授权 上(我在这里遇到了问题) ,那么从 流浪的饭桶复制不安全的公钥。替换 /.vagrant/machines/default/virtualbox/private_key的内容。当然是原始备份: cp private_key private_key-bak

然后运行 vagrant reload,它会说已经识别出不安全的密钥并创建一个新的密钥。

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!

你应该准备好了。

为我删除

cd yourVagrantProject/.vagrant/machines/default/virtualbox/
rm id

成功了。