Как связать каталог проекта Vagrant с существующей виртуальной машиной VirtualBox? - PullRequest
127 голосов
/ 24 февраля 2012

Каким-то образом мой проект Vagrant отсоединился от своей виртуальной машины VirtualBox, поэтому, когда я vagrant up Vagrant импортирует базовый блок и создаст новую виртуальную машину.

Есть ли способ повторного связыванияпроект Vagrant с существующей ВМ?Как Vagrant внутренне связывает Vagrantfile с каталогом VM VirtualBox?

Ответы [ 10 ]

193 голосов
/ 27 августа 2014

Для 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

88 голосов
/ 25 февраля 2012

ВНИМАНИЕ: Приведенное ниже решение работает для Vagrant 1.0.x, но не Vagrant 1.1 +.

Vagrant использует файл ".vagrant" в том же каталоге, что и ваш "Vagrantfile", чтобы отслеживать UUID вашей виртуальной машины. Этот файл не будет существовать, если виртуальная машина не существует. Формат файла - JSON. Это выглядит так, если существует одна виртуальная машина:

{
   "active":{
      "default":"02f8b71c-75c6-4f33-a161-0f46a0665ab6"
   }
}

default - это имя виртуальной машины по умолчанию (если вы не используете настройки нескольких виртуальных машин).

Если ваша виртуальная машина каким-то образом стала диссоциированной, то вы можете сделать VBoxManage list vms, в котором перечислены все виртуальные машины, о которых VirtualBox знает, по ее имени и UUID. Затем вручную создайте файл .vagrant в том же каталоге, что и ваш Vagrantfile, и заполните его правильно.

Запустите vagrant status, чтобы убедиться, что Вагрант подобрал правильные изменения.

Примечание: Это официально не поддерживается Vagrant, и Vagrant может изменить формат .vagrant в любое время. Но это действительно для Vagrant 0.9.7 и будет действовать для Vagrant 1.0.

48 голосов
/ 10 мая 2013

Решение с верхней версией совершенно такое же.

Но сначала вам нужно вручную запустить файл .vbox, чтобы он появился в VBoxManage list vms

Затем вы можете проверить .vagrant/machines/default/virtualbox/id, чтобы убедиться, что uuid правильный.

13 голосов
/ 28 сентября 2016

Если бы проблема была сегодня, моя папка .vagrant отсутствовала и обнаружила, что было несколько больше шагов, чем просто установка идентификатора:

  1. Установите идентификатор:

    VBoxManage list vms
    

    Найдите идентификатор и установите в {project-folder}/.vagrant/machines/default/virtualbox/id.

    Обратите внимание, что default может отличаться, если установлено в вашем Vagrantfile например, config.vm.define "someothername".

  2. Остановить машину для подготовки:

    Создайте файл с именем action_provision в том же каталоге, что и файл id, установите его содержимое: 1.5:{id}, заменив {id} идентификатором, найденным вшаг 1.

  3. Настройка нового открытого / закрытого ключа:

    Vagrant использует закрытый ключ, сохраненный в .vagrant/machines/default/virtualbox/private_key, для подключения ssh к машине.Вам нужно будет сгенерировать новый.

    ssh-keygen -t rsa
    

    назовите его private_key.

    vagrant ssh, а затем скопируйте private_key.pub в /home/vagrant/.ssh/authorized_keys.

9 голосов
/ 09 ноября 2015

Обновление с той же проблемой сегодня с Vagrant 1.7.4:

Например, чтобы связать поле '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
6 голосов
/ 01 ноября 2012

Для установок с несколькими виртуальными машинами это будет выглядеть так:

{
   "active":{
        "web":"a1fc9ae4-5d43-49cb-be31-ab3c4f74745d",
        "db":"13503bc5-76b8-4c26-95c4-32435b372212"
   }
}

Вы можете получить имена виртуальных машин из Vagrantfile, используемого для создания этих виртуальных машин.Посмотрите на эту строку:

config.vm.define :web do |web_config|

"web" - это имя vm в этом случае.

5 голосов
/ 11 апреля 2016

Я использую Vagrant 1.8.1 на OSX El Capitan

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

Таким образом, вместо создания .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

3 голосов
/ 23 февраля 2017

Это изменение от @ ответа Petecoop .

Запустите 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's present...
default: Key inserted! Disconnecting and reconnecting using new SSH key...
==> default: Machine booted and ready!

Вы должны быть готовы.

3 голосов
/ 28 декабря 2016

В Бродяге 1.9.1:

У меня была виртуальная машина в Virtual Box с именем «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
0 голосов
/ 04 марта 2016

Я нахожусь на macos и обнаружил, что удаление .locks на коробках решило мою проблему.

Почему-то

vagrant halt

не удалил эти блокировки, и после восстановления всех моих настроек в .vagrant / machine / default / virtualbox с помощью timemachine, сняв блокировки, загрузился нужный компьютер

Осталась только 1 незначительная проблема. Она загрузилась в grub, поэтому мне пришлось один раз нажать клавишу ввода, не знаю, останется ли она, но я скоро выясню.

Я использую vagrant 1.7.4 и virtualbox 5.0.2

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...