我的Vagrant项目已经解除了与VirtualBox VM的关联,所以当我vagrant up
Vagrant将导入基础框并创建一个新的虚拟机时。
有没有办法将Vagrant项目与现有VM重新关联? Vagrant如何在内部将Vagrantfile与VirtualBox VM目录相关联?
答案 0 :(得分:192)
对于 Vagrant 1.6.3 ,请执行以下操作:
1)在Vagrantfile所在的目录中,运行命令
VBoxManage list vms
你会有这样的事情:
"virtualMachine" {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}
2)转到以下路径:
cd .vagrant/machines/default/virtualbox
3)创建一个名为 id 的文件,其ID为xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
4)保存文件并运行 vagrant up
答案 1 :(得分:87)
警告:以下解决方案适用于Vagrant 1.0.x,但不适用于 Vagrant 1.1 +。
Vagrant使用与“Vagrantfile”相同的目录中的“.vagrant”文件来跟踪VM的UUID。如果VM不存在,则此文件不存在。该文件的格式是JSON。如果存在单个VM,它看起来像这样:
{
"active":{
"default":"02f8b71c-75c6-4f33-a161-0f46a0665ab6"
}
}
default
是默认虚拟机的名称(如果您未使用多VM设置)。
如果您的VM以某种方式取消关联,您可以执行VBoxManage list vms
,它将列出VirtualBox通过其名称和UUID知道的每个VM。然后在与.vagrant
相同的目录中手动创建Vagrantfile
文件,并正确填写内容。
运行vagrant status
以确保Vagrant选择了正确的更改。
注意: Vagrant并未对此进行正式支持,Vagrant可能会随时更改.vagrant
的格式。但这在Vagrant 0.9.7中有效,对Vagrant 1.0有效。
答案 2 :(得分:48)
上层版本的解决方案完全相同。
但首先您需要手动启动.vbox文件,以使其显示在VBoxManage list vms
然后你可以检查.vagrant/machines/default/virtualbox/id
以检查uuid是否正确。
答案 3 :(得分:13)
如果今天出现问题,我的.vagrant
文件夹丢失,发现除了设置ID之外还有一些步骤:
设置ID:
VBoxManage list vms
在{project-folder}/.vagrant/machines/default/virtualbox/id
中找到ID并进行设置。
请注意,如果default
中设置了Vagrantfile
,则config.vm.define "someothername"
可能会有所不同。 action_provision
。
停止配置机器:
在与id
文件相同的目录中创建名为1.5:{id}
的文件,将其内容设置为:{id}
将.vagrant/machines/default/virtualbox/private_key
替换为ssh-keygen -t rsa
第1步。
设置新的公钥/私钥:
Vagrant使用存储在private_key
中的私钥来进入机器。您需要生成一个新的。
vagrant ssh
将其命名为private_key.pub
。
/home/vagrant/.ssh/authorized_keys
然后将<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:id="@+id/imageView"
android:layout_width="116dp"
android:layout_height="178dp"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_alignParentTop="true"
android:layout_marginLeft="16dp"
android:layout_marginTop="16dp"
tools:src="@drawable/pets"/>
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignTop="@+id/imageView"
android:layout_marginLeft="16dp"
android:layout_marginRight="16dp"
android:layout_toEndOf="@+id/imageView"
android:layout_toRightOf="@+id/imageView"
tools:text="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque molestie tincidunt mi a gravida. Aenean faucibus a sapien ut consequat. Praesent sed placerat quam."/>
</RelativeLayout>
</android.support.constraint.ConstraintLayout>
复制到//regvalu can be ^[-+]?[1-9]\d*$(dont alow zero in from
///or ^\d+$ for any digit
var regex = new RegExp(regVal)
if($('#textBox').length == 9 && regex.test($('#textBox').text())
{
alert('Your value is invalid');
}
。
答案 4 :(得分:9)
今天使用Vagrant 1.7.4更新同样的问题:
例如,将'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
答案 5 :(得分:6)
对于多VM设置,它看起来像这样:
{
"active":{
"web":"a1fc9ae4-5d43-49cb-be31-ab3c4f74745d",
"db":"13503bc5-76b8-4c26-95c4-32435b372212"
}
}
您可以从用于创建这些VM的Vagrant文件中获取vm名称。寻找这一行:
config.vm.define :web do |web_config|
“web”是这种情况下vm的名称。
答案 6 :(得分:3)
在Vagrant 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
答案 7 :(得分:3)
这是从@Petecoop's answer修改的。
如果您尚未关闭此框,请运行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!
你应该全力以赴。
答案 8 :(得分:0)
我在macos上发现删除盒子上的.locks解决了我的问题。
出于某种原因
vagrant halt
没有删除这些锁,并且在使用timemachine恢复.vagrant / machine / default / virtualbox中的所有设置后,删除了锁,启动了正确的计算机。
只剩下一个小问题,它启动进了grub,所以我不得不按一次输入,不知道这是否存在,但我很快就会发现。
我正在运行vagrant 1.7.4和virtualbox 5.0.2