Как связать каталог проекта Vagrant с существующей виртуальной машиной VirtualBox?

StackOverflow https://stackoverflow.com/questions/9434313

  •  12-11-2019
  •  | 
  •  

Вопрос

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

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

Это было полезно?

Решение

ПРЕДУПРЕЖДЕНИЕ: Решение ниже работает для 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 и правильно заполните содержимое.

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

Примечание: Это официально не поддерживается Vagrant, и Vagrant может изменить формат .vagrant в любое время.Но это справедливо начиная с 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) Создайте файл с именем идентификатор с идентификатором вашей виртуальной машины xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

4) Сохраняем файл и запускаем бродяга

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

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

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

Была проблема сегодня, мой .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.

Обновление с той же проблемой сегодня с 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

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

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

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

config.vm.define :web do |web_config|

В данном случае «web» — это имя виртуальной машины.

я использую Бродяга 1.8.1 на OSX Эль Капитан

Моя виртуальная машина не закрывалась правильно при перезагрузке компьютера, поэтому, когда я попробовал 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

В Вагранте 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

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

Бегать vagrant halt если вы еще не закрыли коробку.

Затем перечислите свои виртуальные боксы: VBoxManage list vms

В нем будут перечислены все ваши виртуальные боксы.Определите поле, к которому вы хотите вернуться, и возьмите идентификатор между фигурными скобками: {}.

Затем отредактируйте файл идентификатора проекта: sudo nano .vagrant/machines/default/virtualbox/id (из каталога проекта)

Замените его идентификатором, который вы скопировали из списка VB.

Пытаться 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 и обнаружил, что удаление .locks на ящиках решило мою проблему.

По какой-то причине

vagrant halt

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

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

Я использую бродягу 1.7.4 и виртуальный бокс 5.0.2.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top