Как связать каталог проекта Vagrant с существующей виртуальной виртуальной машиной VirtualBox?
Как-то мой проект Vagrant отсоединился от виртуальной виртуальной машины, так что, когда я vagrant up
Vagrant импортирует базовый ящик и создаст новую виртуальную машину.
Есть ли способ повторно связать проект Vagrant с существующей виртуальной машиной?
Как Vagrant внутренне связывает Vagrantfile с виртуальным каталогом VirtualBox?
Ответы
Ответ 1
ПРЕДУПРЕЖДЕНИЕ: Решение ниже работает для Vagrant 1.0.x, но не Vagrant 1.1 +.
Vagrant использует файл ".vagrant" в том же каталоге, что и ваш "Vagrantfile" для отслеживания UUID вашей виртуальной машины. Этот файл не будет существовать, если виртуальная машина не существует. Формат файла - JSON. Это выглядит так, если существует одна виртуальная машина:
{
"active":{
"default":"02f8b71c-75c6-4f33-a161-0f46a0665ab6"
}
}
default
- это имя виртуальной машины по умолчанию (если вы не используете настройки нескольких VM).
Если ваша виртуальная машина каким-то образом отключилась, вы можете сделать VBoxManage list vms
, который будет перечислять каждую виртуальную машину, о которой VirtualBox знает по ее имени и UUID. Затем вручную создайте файл .vagrant
в том же каталоге, что и ваш Vagrantfile
, и правильно заполните его.
Запустите vagrant status
, чтобы убедиться, что Vagrant получил правильные изменения.
Примечание.. Это официально не поддерживается Vagrant, и Vagrant может в любой момент изменить формат .vagrant
. Но это действует с Vagrant 0.9.7 и будет действительным для Vagrant 1.0.
Ответ 2
Для Vagrant 1.6.3 выполните следующие действия:
1) В каталоге, где находится ваш Vagrantfile, запустите команду
VBoxManage list vms
У вас будет что-то вроде этого:
"virtualMachine" {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}
2) Перейдите к следующему пути:
cd .vagrant/machines/default/virtualbox
3) Создайте файл с именем id с идентификатором вашей виртуальной машины xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
4) Сохраните файл и запустите vagrant up
Ответ 3
Решение с верхним вариантом совершенно одинаково.
Но сначала вам нужно запустить файл .vbox вручную, чтобы он отображался в VBoxManage list vms
Затем вы можете проверить .vagrant/machines/default/virtualbox/id
, чтобы проверить правильность uuid.
Ответ 4
Если бы проблема была сегодня, моя папка .vagrant
отсутствовала и обнаружила, что было несколько больше шагов, чем простая установка идентификатора:
Установите идентификатор:
VBoxManage list vms
Найдите идентификатор и установите его в {project-folder}/.vagrant/machines/default/virtualbox/id
.
Обратите внимание, что default
может отличаться, если установлено в вашем Vagrantfile
, например. config.vm.define "someothername"
.
Остановите машину от подготовки:
Создайте файл с именем action_provision
в том же каталоге, что и файл id
, установите для него следующее: 1.5:{id}
заменив {id}
идентификатором, найденным на шаге 1.
Установите новый открытый/закрытый ключ:
Vagrant использует закрытый ключ, хранящийся в .vagrant/machines/default/virtualbox/private_key
, для ssh в машину. Вам нужно будет сгенерировать новый.
ssh-keygen -t rsa
назовите его private_key
.
vagrant ssh
затем скопируйте private_key.pub
в /home/vagrant/.ssh/authorized_keys
.
Ответ 5
Обновление с той же проблемой сегодня с 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
Ответ 6
Для установок с несколькими VM она будет выглядеть так:
{
"active":{
"web":"a1fc9ae4-5d43-49cb-be31-ab3c4f74745d",
"db":"13503bc5-76b8-4c26-95c4-32435b372212"
}
}
Вы можете получить имена vm из Vagrantfile, используемого для создания этих виртуальных машин. Найдите эту строку:
config.vm.define :web do |web_config|
"web" - это имя vm в этом случае.
Ответ 7
Я использую Vagrant 1.8.1 на OSX El Capitan
Мой виртуальный компьютер не был правильно закрыт при перезагрузке компьютера, поэтому, когда я пытался vagrant up
, он всегда создавал новый виртуальный компьютер. Никакие решения здесь не помогли мне. Но что сработало, так это вариант ответа ingmmurillo
Поэтому вместо создания .vagrant/machines/default/virtualbox/id
на основе идентификатора запускается VBoxManage list vms
. Мне пришлось обновить идентификатор в .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
Ответ 8
В Vagrant 1.9.1:
У меня была виртуальная машина в виртуальной коробке с именем "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
Ответ 9
Это изменение из @Petecoop answer.
Запустите vagrant halt
, если вы еще не закрыли окно.
Затем перечислите свои виртуальные ящики: VBoxManage list vms
Он перечислит все ваши виртуальные ящики. Найдите поле, в которое вы хотите вернуться, и вставьте идентификатор в фигурные скобки: {}
.
Затем отредактируйте файл идентификатора проекта: sudo nano .vagrant/machines/default/virtualbox/id
(из каталога проекта)
Замените его идентификатором, который вы скопировали из списка VB.
Попробуйте 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 present...
default: Key inserted! Disconnecting and reconnecting using new SSH key...
==> default: Machine booted and ready!
У тебя все должно быть в порядке.
Ответ 10
Я нахожусь на macos и обнаружил, что удаление .locks на ящиках решило мою проблему.
По какой-то причине
vagrant halt
не удалил эти блокировки, и после восстановления всех моих настроек в .vagrant/machine/default/virtualbox с помощью timemachine, удалив блокировки, правильная машина загрузилась.
Осталось только 1 небольшая проблема, она загрузилась в grub, поэтому мне пришлось нажать один раз, не знаю, останется ли это, но я скоро узнаю.
Я запускаю vagrant 1.7.4 и virtualbox 5.0.2