将Vagrant VM存储在自定义文件夹中

将Vagrant VM存储在自定义文件夹中,vagrant,virtual-machine,virtualbox,vagrantfile,Vagrant,Virtual Machine,Virtualbox,Vagrantfile,我想指定Vagrant将存储我的VM的文件夹 我只对一个VM需要它,所以我不想修改VirtualBox.xmldefaultMachineFolder或更改VBOX\u USER\u HOME环境变量 在Vagrantfile中执行此操作的正确方法是什么? 我已经尝试添加以下行: config.vm.provider "virtualbox" do |vb| vb.customize ["createvm", "--name", "name", "--basefolder", "path"

我想指定Vagrant将存储我的VM的文件夹

我只对一个VM需要它,所以我不想修改VirtualBox.xml
defaultMachineFolder
或更改
VBOX\u USER\u HOME
环境变量

在Vagrantfile中执行此操作的正确方法是什么?

我已经尝试添加以下行:

config.vm.provider "virtualbox" do |vb|
   vb.customize ["createvm", "--name", "name", "--basefolder", "path"]
end
它在我指定的路径上创建VM文件夹,但也在
~/VirtualBox VMs
文件夹,并将错误的VM路径添加到VirtualBox.xml

我还尝试使用组:

config.vm.provider :virtualbox do |vb| 
  vb.customize ["modifyvm", :id, "--groups", "/subpath"] 
end
但它只在
~/VirtualBox VMs
中创建一个子文件夹


请帮忙

这并不容易,但至少我学到了一件好事。即使你没有找到你期望的答案,我也会把它作为一个答案。(提前道歉)

因此,首先:

它在我指定的路径上创建VM文件夹,但也会复制它 在~/VirtualBox VMs文件夹中,将错误的VM路径添加到 VirtualBox.xml

是的,默认情况下,当您在vagrant输出中看到

==> default: Importing base box 'ubuntu/trusty64'...
在幕后,vagrant运行类似于
VBoxManage import…
的操作,因此如果您还定义了
createvm
属性,它将在vagrant box导入之外运行该属性,以便创建副本。注意,
提供程序
块中设置的属性不会覆盖默认属性,而是在默认属性之后运行

所以vagrant做
VBoxManage导入--磁盘/路径
;从VBoxManage运行时,很容易更改为磁盘指定的路径并将VM文件保存到任何位置

但是,当您查看时,它会在运行
VBoxManage import-n/path\u时将
target path
属性的输出带到您的\u box\u ovf\u文件
中,并从那里构建路径,因此它将是任何VM的同一路径文件夹

因此,在您已经提到的方法之上,定义您可以使用


将在自定义路径文件夹中创建VM文件,然后将VM文件夹重新初始化到其默认位置。(我没有尝试,但由于Vagrantfile是一个ruby脚本,您甚至可以从Vagrantfile运行
VBoxManage setproperty

这是一个很好的问题。我知道您已经说过不想移动
defaultMachineFolder
,但这似乎可以解决您的问题。有关更多详细信息,请参阅。
VBoxManage setproperty machinefolder /my_custom_path
vagrant up
VBoxManage setproperty machinefolder default