137

不知何故,我的 Vagrant 项目与它的 VirtualBox VM 脱离了关联,因此当我vagrant upVagrant 将导入 base-box 并创建一个新的虚拟机时。

有没有办法将 Vagrant 项目与现有 VM 重新关联?Vagrant 如何在内部将 Vagrantfile 与 VirtualBox VM 目录关联?

4

11 回答 11

214

对于Vagrant 1.6.3,请执行以下操作:

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

VBoxManage list vms

你会有这样的东西:

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

2)转到以下路径:

cd .vagrant/machines/default/virtualbox

3) 创建一个名为id的文件,其 ID 为您的 VM xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

4) 保存文件并运行vagrant up

于 2014-08-26T23:35:14.043 回答
91

警告:以下解决方案适用于 Vagrant 1.0.x,但不适用于Vagrant 1.1+。

Vagrant 使用与“Vagrantfile”相同目录中的“.vagrant”文件来跟踪 VM 的 UUID。如果 VM 不存在,则该文件将不存在。文件格式为 JSON。如果存在单个 VM,它看起来像这样:

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

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

如果您的虚拟机不知何故变得不相关,您可以做的就是VBoxManage list vms列出 VirtualBox 知道的每个虚拟机的名称和 UUID。.vagrant然后手动在你的同目录下创建一个文件,Vagrantfile并正确填写内容。

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

注意:这不是 Vagrant 官方支持的,Vagrant 可能随时更改格式.vagrant。但这从 Vagrant 0.9.7 开始有效,并且对 Vagrant 1.0 有效。

于 2012-02-24T20:47:42.197 回答
48

与上版本的解决方案是完全一样的。

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

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

于 2013-05-10T15:27:39.877 回答
15

今天遇到问题,我的.vagrant文件夹不见了,发现除了简单的设置id还有几个步骤:

  1. 设置标识:

    VBoxManage list vms
    

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

    请注意,default如果在您的Vagrantfileeg中设置可能会有所不同config.vm.define "someothername"

  2. 停止机器配置:

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

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

    Vagrant 使用存储在其中的私钥.vagrant/machines/default/virtualbox/private_keyssh 进入机器。您需要生成一个新的。

    ssh-keygen -t rsa
    

    命名它private_key

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

于 2016-09-28T09:10:37.743 回答
9

今天用 Vagrant 1.7.4 更新同样的问题:

例如,将框“vip-quickstart_default_1431365185830_12124”与 vagrant 配对。

$ VBoxManage list
"vip-quickstart_default_1431365185830_12124" {50feafd3-74cd-40b5-a170-3c976348de27}
$ echo -n "50feafd3-74cd-40b5-a170-3c976348de27" > .vagrant/machines/default/virtualbox/id
于 2015-11-09T11:04:12.513 回答
6

对于多 VM 设置,它看起来像这样:

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

您可以从用于创建这些虚拟机的 Vagrantfile 中获取虚拟机名称。寻找这一行:

config.vm.define :web do |web_config|

在这种情况下,“web”是虚拟机的名称。

于 2012-10-31T23:45:01.953 回答
5

我在OSX El Capitan上使用Vagrant 1.8.1

当我的计算机重新启动时,我的虚拟机没有正确关闭,所以当我尝试时vagrant up它总是在创建新的虚拟机。这里没有解决方案对我有用。但是起作用的是ingmmurillo 的答案的变体

因此,不要.vagrant/machines/default/virtualbox/id根据 running 的 id创建VBoxManage list vms。我不得不更新 id.vagrant/machines/local/virtual_box/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

于 2016-04-11T04:44:56.547 回答
5

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

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

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

它将列出您所有的虚拟机。确定要恢复的框并抓住大括号之间的 id: {}

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

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

试试vagrant reload

如果这不起作用并且挂在 SSH 授权上(我偶然发现),请从vagrant git复制不安全的公钥。替换/.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!

你应该准备好了。

于 2017-02-23T19:45:06.130 回答
3

在流浪者 1.9.1 中:

我在 Virtual Box 中有一个名为“Ubuntu 16.04.1”的虚拟机,所以我将它打包为一个 vagrant box:

vagrant package --base "Ubuntu 16.04.1"

回应...

==> Ubuntu 16.04.1: Exporting VM...
==> Ubuntu 16.04.1: Compressing package to: blah blah/package.box
于 2016-12-27T21:57:17.423 回答
0

我在 macos 上,发现删除盒子上的 .locks 解决了我的问题。

由于某些原因

vagrant halt

没有删除这些锁,并且在使用 timemachine 恢复我在 .vagrant/machine/default/virtualbox 中的所有设置后,删除了锁,正确的机器启动了。

只剩下 1 个小问题,它引导到 grub,所以我不得不按回车键一次,不知道这是否会留下来,但我很快就会发现。

我正在运行 vagrant 1.7.4 和 virtualbox 5.0.2

于 2016-03-04T09:35:15.137 回答
0

对我来说删除

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

工作。

于 2021-01-13T14:30:03.123 回答