Come esportare una macchina virtuale Vagrant per trasferirla


107

Ho una scatola vagabonda attiva e funzionante (configurata con uno stack LAMP). Devo trasferirlo su un altro PC. Come posso esportarlo? Immagino di poter ottenere un file (o file) che possono essere copiati su un altro PC, quindi posso eseguire un comando per importare la scatola vagabonda.


1
Ho scritto alcuni script per automatizzare il trasferimento di scatole vagabonde. Vedi soniah / transfer_vagrant_boxes
Sonia Hamilton

//, Qualcuno ha provato gli script di Sonia?
Nathan Basanese

@NathanBasanese AFAIU, quegli script aiutano a trasferire le scatole di base, non le VM in esecuzione risultanti, poiché fanno uso del riconfezionamento di scatole vagabonde (vedi i suoi documenti)
Olivier Berger

Risposte:


119

Hai due modi per farlo, lo chiamerò modo sporco e modo pulito :

1. Il modo sporco

Crea una scatola dal tuo attuale ambiente virtuale, usando il vagrant packagecomando:

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

Quindi copia la scatola sull'altro PC, aggiungila usando vagrant box added eseguila vagrant upcome al solito.

Tieni presente che i file nella tua directory di lavoro (quella con il Vagrantfile) vengono condivisi all'avvio della macchina virtuale, quindi devi copiarli anche sull'altro PC.

2. Il modo pulito

Teoricamente non dovrebbe mai essere necessario esportare / importare con Vagrant. Se hai la lungimiranza di utilizzare il provisioning per configurare l'ambiente virtuale (chef, puppet, ansible) e un sistema di controllo della versione come git per la tua directory di lavoro, copiare un ambiente a questo punto sarebbe semplice come eseguire:

git clone <your_repo>
vagrant up

5
Cercando di essere un amministratore pulito e previdente ... Non è necessario inserire una iso di installazione del sistema operativo nel repository git, vero? Lo stai suggerendo, per esempio. usando ansible, il tuo repository conterrebbe il Vagrantfile e un playbook ansible. Il Vagrantfile dovrebbe 1. scaricare una scatola di base da vagrantcloud 2. eseguire il playbook ansible per fornire / configurare la scatola di base utilizzando altri file / repository / cloud-storage. Destra? O c'è qualcos'altro nel repository git?
piani cottura

8
La "via pulita" tiene conto dei database (mySQL, Wordpress) che potrebbero essere all'interno del vm? Come può essere sincronizzato con l'altro PC?
kevllar

1
@kevllar Il modo pulito significa che non ci sono informazioni al di fuori del repository git necessarie per avviare un nuovo ambiente di sviluppo. Ciò implica che l'installazione e la configurazione del database saranno completate durante il provisioning del nuovo vagrant box (tramite Chef / Puppet / what-have-you).
Hovis Biddle

2
Quindi il modo raccomandato da Hashicorp è anche "sporco"? cioè impacchettare la scatola e caricarla sul server Atlas? Non sono sicuro se il modo "pulito" replicherà effettivamente l'ambiente esatto, che pensavo fosse l'intero scopo del vagabondo ....
sijpkes

1
Non capisco come il modo ufficiale sia considerato sporco. Qualsiasi buona anima potrebbe spiegare perché?
thclpr

28

Il mio disco rigido del mio Mac emetteva dei segnali acustici nel bel mezzo di un progetto, quindi ho deciso di installare un SSD. Avevo bisogno di spostare il mio progetto da un disco all'altro. Alcune cose da considerare:

  • Sono vagabondo con virtualbox su un Mac
  • Sto usando git

Questo è ciò che ha funzionato per me:

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`

Ho avuto alcuni problemi con le aggiunte di VB Guest.

inserisci qui la descrizione dell'immagine

Li ho risolti con questa soluzione .


//, lo proverò, @KJPrince. Grazie per averlo analizzato per noi.
Nathan Basanese

//, l'ho provato, ma ho ricevuto gli errori al seguente collegamento quando ho copiato la mia directory VirtualBoxVMs su ~ / VirtualBox \ VMs e ho eseguito vagrant box list: 0bin.net/paste/iCiaqNhU-i3bbfY2#-KDiXYcRFni1RNgNJhOBrIs/…
Nathan Basanese

18

In realtà è piuttosto semplice

  1. Installa la scatola virtuale e vagabondo sulla macchina remota
  2. Avvolgi la tua macchina vagabonda

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

  3. copia la scatola sul telecomando

  4. avvia il box sulla tua macchina remota eseguendo

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

  5. Correre vagrant up


1
Se il nome della macchina è lunga e siete troppo pigri per guardare Virtualbox GUI e digitare il suo nome o id - è possibile elencare tutti i nomi del VM e di id con questo comando da terminale: VBoxManage list vms. Dopo puoi semplicemente copiare e fare ciò che viene detto nei passaggi 2 e 4 di @Phil. :) Sì.
Sid

@Sid perché non solo $ vagrant box list
Ken Ratanachai S.

@KenRatanachaiS perché il tuo comando elenca le caselle, ad esempio: ( scotch/box (virtualbox, 3.0)). Il mio comando - macchine virtuali con identificatore, ad esempio:"Win10 - SandBox" {bc251c06-501f-4c0f-bgfa-21f2815ba2cd}
Sid


2

Nessuna delle risposte precedenti ha funzionato per me. Ho passato 2 giorni a studiare il modo di migrare una macchina Vagrant + VirtualBox da un computer a un altro ... È possibile!

Innanzitutto, devi capire che la macchina virtuale è separata dalla tua cartella di sincronizzazione / condivisa. Quindi, quando impacchettate la vostra macchina, la impacchettate senza i vostri file, ma con i database.

Cosa devi fare:

1- Apri il CMD del tuo computer 1 macchina host (Riga di comando. Aprilo come amministratore con il tasto destro -> "Esegui come amministratore") e vai ai file installati da vagabondo. Nel mio caso: C: / VVV Vedrai il tuo Vagrantfile e anche queste cartelle:

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

La cartella / www / è dove ho la mia cartella di sincronizzazione con i miei domini di sviluppo. Potresti avere la tua cartella di sincronizzazione in un altro posto, assicurati solo di capire cosa stai facendo. Inoltre / config e / database sono cartelle di sincronizzazione.

2- esegui questo comando: vagrant package --vagrantfile Vagrantfile

(Questo comando fa un pacchetto della tua macchina virtuale usando la configurazione di Vagrantfile.)

Ecco cosa puoi leggere nella documentazione di Vagrant sul comando:

Un malinteso comune è che l'opzione --vagrantfile impacchetterà un Vagrantfile che viene usato quando si usa vagrant init con questa scatola. Questo non è il caso. Invece, un Vagrantfile viene caricato e letto come parte del processo di caricamento di Vagrant quando viene utilizzata la casella. Per ulteriori informazioni, leggi l'ordine di caricamento di Vagrantfile.

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

Quando hai finito, avrai un file package.box.

3- Copia tutti questi file (/ config, / database, Vagrantfile, package.box, ecc.) E incollali sul tuo Computer 2 proprio dove vuoi installare la tua macchina virtuale (nel mio caso D: / VVV).

Ora hai una copia di tutto ciò di cui hai bisogno sul tuo computer 2 host.

4- esegui questo: vagrant box add package.box --name VVV

(Il --name è usato per nominare la tua macchina virtuale. Nel mio caso si chiama VVV) (Puoi usare --force se hai già una macchina virtuale con questo nome e vuoi sovrascriverla. (Usa con attenzione!))

Questo decomprimerà la tua nuova macchina virtuale vagabonda.

5- Al termine, eseguire: vagrant up

La macchina verrà installata e dovresti vederla nel "gestore della scatola della macchina virtuale Oracle". Se non riesci a vedere la macchina virtuale, prova a eseguire la casella Oracle VM come amministratore (fai clic con il tasto destro -> Esegui come amministratore)

Ora potresti avere tutto a posto, ma ricorda di vedere se i tuoi host sono come ti aspettavi:

c:/windows/system32/hosts

6- Forse è una buona idea copiare il tuo file host dal tuo Computer 1 al tuo Computer 2. Oppure copia le righe che ti servono. Nel mio caso questi sono gli host di cui ho bisogno:

192.168.50.4 test.dev
192.168.50.4 vvv.dev
...

Dove 192.168.50.4 è l'IP della mia macchina virtuale e test.dev e vvv.dev stanno sviluppando host.

Spero che questo possa aiutarti :) Sarò felice se fornirai un feedback sul tuo passaggio.

Alcune particolarità del mio caso che potresti trovare:

Quando ho corso vagabondo, c'era un problema con mysql, non funzionava. Ho dovuto eseguire sul server virtuale (fare clic con il tasto destro sulla macchina virtuale Oracle -> Mostra console):apt-get install mysql-server

Dopo questo, sono corso di nuovo vagabondo e tutto funzionava ma senza dati sui database. Quindi ho eseguito un mysqldump di tutte le tabelle dal Computer 1 e le ho caricate sul Computer 2.

ALTRE NOTE: La mia macchina virtuale non è esattamente su Computer 1 e Computer 2. Ad esempio, ho fatto qualche tempo fa una configurazione interna per utilizzare NFS (per velocizzare le cartelle di sincronizzazione del server) e avevo bisogno di eseguire nuovamente questo comando sul Computer 2 ospite:vagrant plugin install vagrant-winnfsd



0

A partire dal 2019 è presente un sottocomando: vagrant box repackage

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

Puoi trovare name providere versioncorrendovagrant box list

vagrant box list
macinbox (virtualbox, 10.14.5)

L'output di vagrant box repackageè un file chiamato package.boxche è fondamentalmente un file tgz il cui contenuto può essere elencato come di seguito:

tar tzf package.box
./metadata.json
./box.ovf
./Vagrantfile
./box-disk001.vmdk
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.