Как связать каталог проекта Vagrant с существующей виртуальной машиной VirtualBox?
каким-то образом мой бродячий проект отделился от своей виртуальной машины VirtualBox, так что когда я vagrant up
Vagrant импортирует базовое поле и создаст новую виртуальную машину.
есть ли способ повторно связать проект Vagrant с существующей виртуальной машиной? Как Vagrant внутренне связывает Vagrantfile с каталогом виртуальной машины VirtualBox?
10 ответов
предупреждение: Решение ниже работает для Vagrant 1.0.x но не залетный 1.1+.
Vagrant использует ".файл " vagrant "в том же каталоге, что и ваш" Vagrantfile " для отслеживания UUID вашей виртуальной машины. Этот файл не будет существовать, если виртуальная машина не существует. Формат файла-JSON. Это выглядит так, если существует одна виртуальная машина:
{
"active":{
"default":"02f8b71c-75c6-4f33-a161-0f46a0665ab6"
}
}
default
- имя виртуальной машины по умолчанию (если вы не используете настройки нескольких виртуальных машин).
если ваша виртуальная машина каким-то образом стала диссоциированной, что вы можете сделать, это сделать VBoxManage list vms
который будет перечислять каждую виртуальную машину, о которой VirtualBox знает по ее имени и UUID. Затем вручную создайте .vagrant
файл в том же каталоге, что и ваш Vagrantfile
и заполните содержимое должным образом.
Run vagrant status
чтобы убедиться, что бродяга подобрал соответствующие изменения.
Примечание: это официально не поддерживается Vagrant и Vagrant может изменить формат .vagrant
at в любой момент. Но это действительно с Vagrant 0.9.7 и будет действительно для Vagrant 1.0.
на залетный 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-XXXXXXXXXX
4) сохраните файл и запустите залет вверх
решение с верхней версией совершенно такое же.
но сначала вам нужно запустить .файл vbox вручную, чтобы он отображался в VBoxManage list vms
затем вы можете проверить .vagrant/machines/default/virtualbox/id
чтобы проверить, что UUID является правильным.
был вопрос сегодня, мой .vagrant
папка отсутствовала и обнаружила, что было еще несколько шагов, чем просто установка id:
-
установить id:
VBoxManage list vms
найти идентификатор и установить в
{project-folder}/.vagrant/machines/default/virtualbox/id
.отметим, что
default
может отличаться, если установлено в вашемVagrantfile
напримерconfig.vm.define "someothername"
. -
остановите машину от подготовки:
создайте файл с именем
action_provision
в том же dir, что и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
.
обновление с той же проблемой сегодня с Vagrant 1.7.4:
- полезная нить в https://github.com/mitchellh/vagrant/issues/1755 и особенно со следующими командами:
например, для сопряжения коробки 'vip-quickstart_default_1431365185830_12124' с vagrant.
$ VBoxManage list
"vip-quickstart_default_1431365185830_12124" {50feafd3-74cd-40b5-a170-3c976348de27}
$ echo -n "50feafd3-74cd-40b5-a170-3c976348de27" > .vagrant/machines/default/virtualbox/id
для настроек multi-VM это будет выглядеть так:
{
"active":{
"web":"a1fc9ae4-5d43-49cb-be31-ab3c4f74745d",
"db":"13503bc5-76b8-4c26-95c4-32435b372212"
}
}
вы можете получить имена виртуальных машин из файла Vagrantfile, используемого для создания этих виртуальных машин. Посмотрите на эту строку:
config.vm.define :web do |web_config|
" web " - это имя виртуальной машины в этом случае.
В Бродячий 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
Я использую залетный 1.8.1 on OSX El Capitan
моя виртуальная машина была закрыта неправильно при перезагрузке компьютера, поэтому, когда я попытался vagrant up
Он всегда создавал новую виртуальную машину. Никакие решения здесь не работали для меня. Но что сработало вариации ingmmurillo это
поэтому вместо создания .vagrant/machines/default/virtualbox/id
на основе идентификатора от бега VBoxManage list vms
. Мне пришлось обновить id в .vagrant/machines/local/virtual_box/id
у меня есть один вкладыш, что по существу делает это для меня:
echo -n `VBoxManage list vms | head -n 1 | awk '{print substr(, 2, length()-2)}'` > .vagrant/machines/local/virtualbox/id
это предполагает, что первая коробка-это та, которую мне нужно начать с запуска VBoxManage list vms
- это доработанная от ответ@Petecoop.
Run vagrant halt
Если вы еще не закрыли окно еще.
затем перечислите свои virtualboxes:VBoxManage list vms
это список всех ваших virtualboxes. Определите поле, к которому вы хотите вернуться, и возьмите идентификатор между фигурными скобками:{}
.
затем отредактируйте файл идентификатора проекта:sudo nano /.vagrant/machines/default/virtualbox/id
замените его идентификатором, скопированным из списка VBs.
попробовать vagrant reload
.
если это не работает и зависает на авторизации SSH (где я споткнулся), скопируйте небезопасный открытый ключ из залетный ГИТ. Заменить содержимое /.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!
вы должны быть все готово.
Я на macos и обнаружил, что удаление .замки на коробках решили мою проблему.
почему-то
vagrant halt
не удалял эти блокировки и после восстановления всех моих настроек .vagrant/machine/default / virtualbox используя timemachine, удалив блокировки, загрузилась правая машина.
остается только 1 незначительная проблема, она загрузилась в grub, поэтому мне пришлось нажать enter один раз, не знаю, останется ли это, но я скоро узнаю достаточно.
Я запускаю vagrant 1.7.4 и virtualbox 5.0.2