Как экспортировать виртуальную машину Vagrant для ее переноса


108

У меня есть бродячая коробка (настроенная со стеком LAMP). Мне нужно перенести на другой компьютер. Как его экспортировать? Я предполагаю, что могу получить файл (или файлы), который можно скопировать на другой компьютер, так что там я могу запустить какую-нибудь команду для импорта бродячей коробки.


1
Я написал несколько скриптов для автоматизации передачи бродячих ящиков. См. Soniah / transfer_vagrant_boxes
Соня Гамильтон

//, скрипты Сони кто нибудь пробовал?
Натан Басанезе, 01

@NathanBasanese AFAIU, эти скрипты помогают переносить базовые блоки, а не результирующие работающие виртуальные машины, поскольку они используют переупаковку бродячих ящиков (см. Его документацию)
Оливье Бергер

Ответы:


120

У вас есть два способа сделать это, я назову это грязным и чистым способом :

1. Грязный путь

Создайте ящик из вашей текущей виртуальной среды, используя vagrant packageкоманду:

http://docs.vagrantup.com/v2/cli/package.html

Затем скопируйте коробку на другой компьютер, добавьте ее vagrant box addи запустите vagrant upкак обычно.

Имейте в виду, что файлы в вашем рабочем каталоге (тот, который отмечен Vagrantfile) являются общими при загрузке виртуальной машины, поэтому вам также необходимо скопировать его на другой компьютер.

2. Чистый путь

Теоретически никогда не должно быть необходимости выполнять экспорт / импорт с помощью Vagrant. Если у вас есть предусмотрительность использовать подготовку для настройки виртуальной среды (chef, puppet, ansible) и системы контроля версий, такой как git, для вашего рабочего каталога, копирование среды на этом этапе будет простым как запуск:

git clone <your_repo>
vagrant up

5
Пытаясь быть таким чистым , дальновидным администратором ... Вам не нужно помещать iso для установки ОС в репозиторий git, не так ли? Вы предлагаете это, например? используя ansible, ваше репо будет содержать Vagrantfile и ansible playbook. Vagrantfile будет 1. загружать базовый ящик из vagrantcloud 2. запускать доступную книгу воспроизведения, чтобы подготовить / настроить базовый ящик с использованием других файлов / репозиториев / облачного хранилища. Правильно? Или в репозитории git есть что-то еще?
hobs

8
Учитывает ли "чистый способ" базы данных (mySQL, Wordpress), которые могут находиться внутри виртуальной машины? Как это можно синхронизировать с другим компьютером?
kevllar

1
@kevllar Чистый способ означает, что вне репозитория git нет информации, которая требуется для запуска новой среды разработки. Это означает, что установка и настройка базы данных будут завершены во время подготовки нового бродячего ящика (через Chef / Puppet / what-have-you).
Hovis Biddle

2
Так является ли способ, рекомендованный Hashicorp, также «грязным»? т.е. упаковать коробку и загрузить на сервер атласа? Я не уверен, что «чистый» способ на самом деле воспроизведет точную среду, в которой, как я думал, была вся цель бродяги ....
sijpkes

1
Я не понимаю, как официальный путь считается грязным. Любая добрая душа могла бы объяснить почему?
thclpr

28

Мой жесткий диск в моем Mac издавал звуковые сигналы в середине проекта, поэтому я решил установить SSD. Мне нужно было перенести мой проект с одного диска на другой. Несколько вещей, которые следует учитывать:

  • Я бродяга с виртуальным боксом на Mac
  • Я использую git

Вот что сработало для меня:

1.) Copy your ~/.vagrant.d directory to your new machine.
2.) Copy your ~/VirtualBox\ VMs directory to your new machine. 
3.) In VirtualBox add the machines one by one using **Machine** >> **Add**
4.) Run `vagrant box list` to see if vagrant acknowledges your machines. 
5.) `git clone my_project`
6.) `vagrant up`

У меня было несколько проблем с дополнениями VB Guest.

введите описание изображения здесь

Я исправил их этим решением .


//, я попробую это, @KJPrince. Спасибо, что сломали это для нас.
Натан Басанезе, 01

//, я попробовал, но по следующей ссылке у меня возникли ошибки, когда я скопировал каталог VirtualBoxVMs в ~ / VirtualBox \ VMs и запустил vagrant box list: 0bin.net/paste/iCiaqNhU-i3bbfY2#-KDiXYcRFni1RNgNJhOBrIs/…
Натан Basanese 01

18

На самом деле это довольно просто

  1. Установите виртуальную коробку и бродягу на удаленную машину
  2. Заверните свою бродячую машину

    vagrant package --base [machine name as it shows in virtual box] --output /Users/myuser/Documents/Workspace/my.box

  3. скопируйте коробку на свой пульт

  4. запустите поле на удаленном компьютере, запустив

    vagrant init [machine name as it shows in virtual box] /Users/myuser/Documents/Workspace/my.box

  5. Бегать vagrant up


1
Если имя вашей машины долго и вы слишком ленивы , чтобы посмотреть на VirtualBox GUI и введите его имя или идентификатор - вы можете перечислить имена всех вашего ВМ и идентификатор с этой командой терминала: VBoxManage list vms. После вы можете просто скопировать и сделать то, что сказано на 2-м и 4-м шагах @Phil. :) Ага.
Сид

@Sid, почему бы не просто $ vagrant box list
Кен Ратаначай С.

@KenRatanachaiS, потому что в вашей команде перечислены поля, например: ( scotch/box (virtualbox, 3.0)). Моя команда - виртуальные машины с идентификатором, например:"Win10 - SandBox" {bc251c06-501f-4c0f-bgfa-21f2815ba2cd}
Сид


2

Ни один из приведенных выше ответов не помог мне. Я 2 дня работал над тем, как перенести машину Vagrant + VirtualBox с компьютера на другой ... Это возможно!

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

Что тебе необходимо сделать:

1- Откройте CMD вашего компьютера 1 хост-машина (командная строка. Откройте его как Adminitrator правой кнопкой -> «Запуск от имени администратора») и перейдите к установленным вами бродячим файлам. В моем случае: C: / VVV Вы увидите свой Vagrantfile, а также эти папки:

/config/
/database/
/log/
/provision/
/www/
Vagrantfile
...

Папка / www / - это место, где у меня есть папка синхронизации с моими доменами разработки. У вас может быть папка синхронизации в другом месте, просто убедитесь, что понимаете, что делаете. Также / config и / database - это папки синхронизации.

2- запустите эту команду: vagrant package --vagrantfile Vagrantfile

(Эта команда создает пакет вашей виртуальной машины, используя вашу конфигурацию Vagrantfile.)

Вот что вы можете прочитать в документации Vagrant о команде:

Распространенное заблуждение состоит в том, что опция --vagrantfile будет упаковывать Vagrantfile, который используется, когда vagrant init используется с этим полем. Это не вариант. Вместо этого Vagrantfile загружается и читается как часть процесса загрузки Vagrant, когда используется бокс. Для получения дополнительной информации прочтите о порядке загрузки Vagrantfile.

https://www.vagrantup.com/docs/cli/package.html

По завершении у вас будет файл package.box.

3- Скопируйте все эти файлы (/ config, / database, Vagrantfile, package.box и т.д.) и вставьте их на свой компьютер 2 именно там, где вы хотите установить свою виртуальную машину (в моем случае D: / VVV).

Теперь у вас есть копия всего необходимого на вашем компьютере 2 хоста.

4- запустите это: vagrant box add package.box --name VVV

(--Name используется для имени вашей виртуальной машины. В моем случае она называется VVV) (Вы можете использовать --force, если у вас уже есть виртуальная машина с этим именем и вы хотите ее перезаписать. (Используйте осторожно!))

Это распакует вашу новую бродячую виртуальную машину.

5- Когда закончите, запустите: vagrant up

Машина установится, и вы должны увидеть это в диспетчере виртуальных машин Oracle. Если вы не видите виртуальную машину, попробуйте запустить окно виртуальной машины Oracle от имени администратора (щелкните правой кнопкой мыши -> Запуск от имени администратора)

Теперь у вас все в порядке, но не забудьте проверить, соответствуют ли ваши хосты вашим ожиданиям:

c:/windows/system32/hosts

6- Может быть, неплохо скопировать файл хоста с компьютера 1 на компьютер 2. Или скопируйте нужные строки. В моем случае это те хосты, которые мне нужны:

192.168.50.4 test.dev
192.168.50.4 vvv.dev
...

Где 192.168.50.4 - это IP-адрес моей виртуальной машины, а test.dev и vvv.dev разрабатывают хосты.

Надеюсь, это поможет вам :) Буду рад, если вы поделитесь своим мнением.

Некоторые особенности моего дела, которые вы можете найти:

Когда я запустил vagrant, возникла проблема с mysql, он не работал. Мне пришлось запустить виртуальный сервер (щелкните правой кнопкой мыши виртуальную машину oracle -> Показать консоль):apt-get install mysql-server

После этого я снова запустил vagrant up, и все работало, но без данных в базах данных. Итак, я сделал mysqldump all-table с компьютера 1 и загрузил их на компьютер 2.

ДРУГИЕ ЗАМЕЧАНИЯ: Моя виртуальная машина находится не совсем на Компьютере 1 и Компьютере 2. Например, некоторое время назад я сделал внутреннюю конфигурацию для использования NFS (для ускорения папок синхронизации сервера), и мне нужно было снова запустить эту команду на Компьютере 2 хост:vagrant plugin install vagrant-winnfsd


1

Как указано в

Как я могу изменить место, где Vagrant ищет свой виртуальный жесткий диск?

состояние виртуальной машины хранится в предопределенной папке VirtualBox. Копирование соответствующей машины (папки) помимо вашего бродячего проекта на другой хост должен сохранить состояние вашей виртуальной машины.


0

По состоянию на 2019 год есть подкоманда: vagrant box repackage

vagrant box repackage --help 
Usage: vagrant box repackage <name> <provider> <version>
    -h, --help                       Print this help

Вы можете найти name providerи versionзапустивvagrant box list

vagrant box list
macinbox (virtualbox, 10.14.5)

Вывод vagrant box repackage- это файл с именем, package.boxкоторый в основном является файлом tgz, содержимое которого может быть указано, как показано ниже:

tar tzf package.box
./metadata.json
./box.ovf
./Vagrantfile
./box-disk001.vmdk
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.