Ошибка ваграннта - машина VirtualBox с именем уже существует

Я хочу использовать ubuntu/xenial64 для создания двух отдельных виртуальных машин для двух отдельных проектов. Я определил Vagrantfile в двух отдельных каталогах проекта и добавил строку config.vm.box = "ubuntu/xenial64" к каждому.

Первый бокс успешно загружается. Но когда я делаю vagrant up для второго проекта, я получаю ошибку

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

В документации Vagrant четко написано, что

Коробки хранятся в глобальном масштабе для текущего пользователя. Каждый проект использует в качестве исходного изображения для клонирования и никогда не изменяет фактическое базовое изображение. Это означает, что если у вас есть два проекта, hashicorp/exact64, который мы только что добавили, добавив файлы в один гость машина не будет влиять на другую машину.

Почему тогда я получаю эту ошибку?

Я уже проверил другие подобные вопросы, но я не понимаю их решение об удалении существующих виртуальных машин, которые, как представляется, имеют одинаковое имя. Согласно приведенной выше цитате из бродяг, это не обязательно. Я что-то пропустил?

Ответы

Ответ 1

Вам не нужно удалять другую виртуальную машину, и вы действительно можете иметь много виртуальных машин из одного окна.

ваша ошибка может быть связана с именем VirtualBox виртуальной машины, созданной в VirtualBox. Если вы переопределили свойство, чтобы установить это имя и его одно и то же имя в ваших двух проектах, тогда произойдет столкновение, см. это , чтобы увидеть различные способы определения имени виртуальной машины

чтобы либо оставить бродягу определить имя виртуальной машины, либо убедиться, что у вас есть уникальное имя виртуальной машины в вашем другом проекте, и она будет работать просто отлично

UPDATE Я проверяю это конкретное поле и содержит следующий файл 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 как уникальный для каждого из ваших проектов.

Ответ 2

Я обнаружил, что проще изменить исходный блок Vagrantfile (расположенный ~/.vagrant.d/boxes/ubuntu-VAGRANTSLASH-xenial64/<VERSTION>/virtualbox/Vagrant‌​file), а не каждый раз обдумывать уникальные имена виртуальных машин.

Рабочая конфигурация Vagrantfile (box!):

include_vagrantfile = File.expand_path("../include/_Vagrantfile", __FILE__)
load include_vagrantfile if File.exist?(include_vagrantfile)

Vagrant.configure("2") do |config|
  config.vm.base_mac = "0223C61ABA59"
  config.ssh.username = "ubuntu"
  config.ssh.password = "86f7d0e04910475d8789aa8f"
  config.vm.synced_folder '.', '/vagrant', disabled: true

  config.vm.provider "virtualbox" do |vb|
     vb.customize [ "modifyvm", :id, "--uart1", "0x3F8", "4" ]
  end
end