我想使用ubuntu/xenial64框为两个单独的项目创建两个单独的VM。我在两个单独的项目目录中定义了Vagrantfile,并在每个目录中添加了config.vm.box = "ubuntu/xenial64"行。

第一个盒子成功启动。但是当我为第二个项目做vagrant up时,我得到了错误

A VirtualBox machine with the name 'ubuntu-xenial-16.04-cloudimg' already exists.


在Vagrant的文档中清楚地写着


框是为当前用户全局存储的。每个项目使用一个
框作为要从中克隆的初始映像,并且从不修改实际的
基本图片。这意味着如果您有两个项目都使用
我们刚刚添加的hashicorp / precise64框,可在一个来宾中添加文件
机器对另一台机器无效。


为什么我会收到此错误?

我已经签出了other similar questions,但是我不明白他们删除现有具有相同名称的VM的解决方案。根据上面的Vagrant文​​档报价,这不是必需的。我想念什么吗?

最佳答案

您不需要删除其他VM,并且确实可以在同一框中包含多个VM。

您的错误可能与在VirtualBox中创建的VM的VirtualBox名称有关,如果您有覆盖属性以在2个项目上设置此名称及其相同的名称,则将发生冲突,请参见此answer定义虚拟机名称的不同方法

因此,要么让vagrant定义VM的名称,要么确保您在不同的项目中拥有唯一的VM名称,并且它可以正常运行

更新
我选中此特定框,其中包含以下Vagrantfile

Vagrant.configure("2") do |config|
  config.vm.base_mac = "02101FC67BA9"
  config.ssh.username = "ubuntu"
  config.ssh.password = "c1580f876b655137c6c35b69"
  config.vm.synced_folder '.', '/vagrant', disabled: true

  config.vm.provider "virtualbox" do |vb|
     vb.name = "ubuntu-xenial-16.04-cloudimg"
     vb.customize [ "modifyvm", :id, "--uart1", "0x3F8", "4" ]
     vb.customize [ "modifyvm", :id, "--uartmode1", "file", File.join(Dir.pwd, "%s-console.log" % vb.name) ]
  end
end


因此请确保在您的Vagrantfile中覆盖此属性

  config.vm.provider "virtualbox" do |vb|
     vb.name = "your specific project name"


并将vb.name更改为每个项目都唯一的。

关于vagrant - Vagrant 错误-名称已经存在的VirtualBox计算机,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37165846/

10-12 00:25
查看更多