Як експортувати віртуальну віртуальну машину для її передачі


107

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


1
Я написав кілька сценаріїв для автоматизації передачі бродячих коробок. Дивіться soniah / transfer_vagrant_boxes
Sonia Hamilton

// Чи хтось випробував сценарії Соні?
Натан Басанес

@NathanBasanese AFAIU, ці сценарії допомагають перенести базові коробки, а не запущені VM, оскільки вони використовують перепаковування бродячого поля (див. Його документи)
Олів'є Бергер,

Відповіді:


119

У вас є два способи зробити це, я назву це брудним способом і чистим способом :

1. Брудний шлях

Створіть вікно з вашого поточного віртуального середовища за допомогою vagrant packageкоманди:

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

Потім скопіюйте поле на інший ПК, додайте його за допомогою vagrant box addта запустіть за допомогою vagrant upзвичайного.

Майте на увазі, що файли у вашому робочому каталозі (той, який має Vagrantfile) спільно використовуються під час завантаження віртуальної машини, тому вам також потрібно скопіювати його на інший ПК.

2. Чистий шлях

Теоретично, ніколи не слід робити експорт / імпорт із Vagrant. Якщо у вас є передбачливість використовувати резервування для налаштування віртуального середовища (шеф-кухар, ляльковий, ансиблей) та системи управління версіями, як git для вашої робочої директорії, скопіювати середовище в цей момент було б просто як запущене:

git clone <your_repo>
vagrant up

5
Намагаючись бути таким чистим , передбачуваним адміністратором ... Вам не потрібно ставити iso для установки ОС у свій git repo, чи не так? Ви припускаєте, наприклад, використовуючи ansible, ваше репо буде містити Vagrantfile та ансибуль. Vagrantfile: 1. завантажить базову скриньку з vagrantcloud 2. запустить програму "ansible playbook" для надання / налаштування базової скриньки за допомогою інших файлів / repos / cloud-storage. Правильно? Або є щось ще в git repo?
варильні панелі

8
Чи "чистий спосіб" враховує бази даних (mySQL, Wordpress), які можуть бути всередині vm? Як це можна синхронізувати з іншим ПК?
кевлар

1
@kevllar Чистий спосіб означає, що за межами сховища git немає інформації, необхідної для запуску нового середовища розробників. Це означає, що встановлення та налаштування бази даних буде завершено під час надання нового віконного вікна (за допомогою шеф-кухаря / ляльки / що-у вас є).
Ховіс Бідл

2
Тож спосіб, рекомендований Хашикорпом, також "брудний"? тобто упакувати коробку і завантажити її на сервер атласу? Я не впевнений, чи "чистий" спосіб насправді повторить точне середовище, яке, на мою думку, було
цілістю

1
Я не розумію, як офіційний спосіб вважається брудним. Будь-яка добра душа могла пояснити чому?
thclpr

28

Мій жорсткий диск на моєму Mac мав звукові звуки посеред проекту, тому я вирішив встановити SSD. Мені потрібно було перемістити свій проект з одного диска на інший. Деякі речі, які слід врахувати:

  • Я бродячий w / virtualbox на 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. Дякуємо, що зламали її для нас.
Натан Басанес

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

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. Після цього ви можете просто скопіювати та виконати те, що сказано в @Phil 2-й та 4-й кроки. :) Так.
Сид

@Sid чому не просто $ vagrant box box
Ken Ratanachai S.

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


2

Жодна з наведених відповідей не працювала для мене. Я вже 2 дні розробляю спосіб перенесення машини Vagrant + VirtualBox з комп'ютера на інший ... Це можливо!

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

Що потрібно зробити:

1- Відкрийте CMD свого комп'ютера 1 хост-машина (командний рядок. Відкрийте його як адміністратор правою кнопкою -> "Запустити як адміністратор") та перейдіть до встановлених бродячих файлів. У моєму випадку: C: / VVV Ви побачите свій Vagrantfile і ці папки:

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

/ Www / папка - це те, де у мене є папка синхронізації зі своїми областями розвитку. У вас може бути папка синхронізації в іншому місці, просто не забудьте зрозуміти, що ви робите. Також / config та / database є папками синхронізації.

2- виконати цю команду: vagrant package --vagrantfile Vagrantfile

(Ця команда виконує пакет вашої віртуальної машини, використовуючи конфігурацію Vagrantfile.)

Ось що ви можете прочитати в документації Vagrant про команду:

Поширене помилкове уявлення про те, що параметр --vagrantfile буде пакувати Vagrantfile, який використовується, коли з цим полем використовується ingrant init. Це не так. Натомість Vagrantfile завантажується та читається як частина процесу завантаження Vagrant при використанні поля. Для отримання додаткової інформації читайте про порядок завантаження Vagrantfile.

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

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

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

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

4- виконати це: vagrant box add package.box --name VVV

(Ім'я - використовується для імені вашої віртуальної машини. У моєму випадку воно називається VVV) (Ви можете використовувати --force, якщо у вас вже є віртуальна машина з цим ім'ям і хочете її перезаписати. (Використовуйте обережно!))

Це розпакує вашу нову бродячу Віртуальну машину.

5- Закінчивши, запустіть: vagrant up

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

Зараз у вас може бути все гаразд, але пам’ятайте, щоб побачити, чи ваші господарі такі, як ви очікували:

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 розробляють хости.

Я сподіваюсь, що це може вам допомогти :) Я буду радий, якщо ви відгукуєтесь про свою поїздку.

Деякі особливості мого випадку, які ви можете знайти:

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

Після цього я знову побіг бродячим і все працювало, але без даних про бази даних. Тому я зробив mysqldump всі таблиці з Комп'ютера 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.