Cómo exportar una máquina virtual Vagrant para transferirla

107

Tengo una caja vagabunda en funcionamiento (configurada con una pila LAMP). Necesito transferirlo a otra PC. ¿Cómo puedo exportarlo? Supongo que puedo obtener un archivo (o archivos) que se pueden copiar a otra PC, así que allí puedo ejecutar algún comando para importar el cuadro vagabundo.

Eugenio
fuente
1
Escribí algunos guiones para automatizar la transferencia de cajas vagabundas. Ver soniah / transfer_vagrant_boxes
Sonia Hamilton
//, ¿Alguien ha probado los guiones de Sonia?
Nathan Basanese
@NathanBasanese AFAIU, esos scripts ayudan a transferir cajas base, no las VM en ejecución resultantes, ya que hacen uso del reempaquetado de cajas vagabundas (ver sus documentos)
Olivier Berger

Respuestas:

119

Tienes dos formas de hacer esto, lo llamaré forma sucia y forma limpia :

1. El camino sucio

Cree una caja desde su entorno virtual actual, usando el vagrant packagecomando:

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

Luego copie la caja en la otra computadora, agréguela usando vagrant box addy ejecútela usando vagrant upcomo de costumbre.

Tenga en cuenta que los archivos en su directorio de trabajo (el que tiene Vagrantfile) se comparten cuando se inicia la máquina virtual, por lo que también debe copiarlos en la otra computadora.

2. El camino limpio

En teoría, nunca debería ser necesario exportar / importar con Vagrant. Si tiene la previsión de utilizar el aprovisionamiento para configurar el entorno virtual (chef, puppet, ansible) y un sistema de control de versiones como git para su directorio de trabajo, copiar un entorno sería en este punto tan simple como ejecutar:

git clone <your_repo>
vagrant up
Emyl
fuente
5
Tratando de ser un administrador limpio y previsor ... No tienes que poner una iso de instalación del sistema operativo en tu repositorio de git, ¿verdad? ¿Está sugiriendo eso, por ejemplo? usando ansible, su repositorio contendría el Vagrantfile y un libro de jugadas ansible. El Vagrantfile 1. descargaría una caja base de vagrantcloud 2. ejecutaría el libro de jugadas ansible para aprovisionar / configurar la caja base usando otros archivos / repositorios / almacenamiento en la nube. ¿Correcto? ¿O hay algo más en el repositorio de git?
placas
8
¿La "forma limpia" tiene en cuenta las bases de datos (mySQL, Wordpress) que podrían estar dentro de la máquina virtual? ¿Cómo se puede sincronizar con la otra PC?
kevllar
1
@kevllar La forma limpia significa que no hay información fuera del repositorio de git que sea necesaria para iniciar un nuevo entorno de desarrollo. Esto implica que la instalación y configuración de la base de datos se completará durante el aprovisionamiento del nuevo vagrant box (a través de Chef / Puppet / what-have-you).
Hovis Biddle
2
Entonces, ¿la forma recomendada por Hashicorp también es 'sucia'? es decir, empaquetar la caja y cargarla en el servidor atlas? No estoy seguro de si la forma 'limpia' realmente replicará el entorno exacto, que pensé que era el propósito de vagabundo ....
sijpkes
1
No entiendo cómo se considera sucio el camino oficial. ¿Cualquier alma buena podría explicar por qué?
2017
28

El disco duro de mi Mac emitía pitidos en medio de un proyecto, así que decidí instalar un SSD. Necesitaba mover mi proyecto de un disco a otro. Algunas cosas a considerar:

  • Soy un vagabundo con virtualbox en una Mac
  • Estoy usando git

Esto es lo que funcionó para mí:

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`

Tuve algunos problemas con las adiciones de VB Guest.

ingrese la descripción de la imagen aquí

Los arreglé con esta solución .

Ken Prince
fuente
//, voy a probar esto, @KJPrince. Gracias por desglosarlo por nosotros.
Nathan Basanese
//, lo intenté, pero obtuve los errores en el siguiente enlace cuando copié mi directorio VirtualBoxVMs en ~ / VirtualBox \ VMs, y ejecuté vagrant box list: 0bin.net/paste/iCiaqNhU-i3bbfY2#-KDiXYcRFni1RNgNJhOBrIs/…
Nathan Basanés
18

Esto es realmente bastante simple

  1. Instalar caja virtual y vagabundo en la máquina remota
  2. Envuelve tu máquina vagabunda

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

  3. copia la caja a tu control remoto

  4. inicie el cuadro en su máquina remota ejecutando

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

  5. correr vagrant up

Stefan Diabo
fuente
1
Si el nombre de su máquina es largo y que son demasiado perezosos para mirar a Virtualbox interfaz gráfica de usuario y el tipo de su nombre o valor de id - puede listar todos los nombres de la máquina virtual y el ID del con este comando en el terminal: VBoxManage list vms. Después, puede copiar y hacer lo que se indica en los pasos 2 y 4 de @Phil. :) Sí.
Sid
@ Sid, ¿por qué no solo $ vagrant box list?
Ken Ratanachai S.
@KenRatanachaiS porque su comando enumera cuadros, por ejemplo: ( scotch/box (virtualbox, 3.0)). Mi comando - máquinas virtuales con identificador, por ejemplo:"Win10 - SandBox" {bc251c06-501f-4c0f-bgfa-21f2815ba2cd}
Sid
2

Ninguna de las respuestas anteriores funcionó para mí. He estado 2 días trabajando en la forma de migrar una máquina Vagrant + VirtualBox de una computadora a otra ... ¡Es posible!

Primero, debe comprender que la máquina virtual está separada de su carpeta de sincronización / compartida. Entonces, cuando empaca su máquina, la empaqueta sin sus archivos, pero con las bases de datos.

Qué necesitas hacer:

1- Abra el CMD de la máquina host de su computadora 1 (Línea de comando. Ábralo como Adminitrador con el botón derecho -> "Ejecutar como administrador") y vaya a sus archivos vagabundos instalados. En mi caso: C: / VVV Verá su Vagrantfile y también estas carpetas:

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

La carpeta / www / es donde tengo mi carpeta de sincronización con mis dominios de desarrollo. Puede tener su carpeta de sincronización en otro lugar, solo asegúrese de comprender lo que está haciendo. También / config y / database son carpetas de sincronización.

2- ejecuta este comando: vagrant package --vagrantfile Vagrantfile

(Este comando hace un paquete de su máquina virtual usando su configuración de Vagrantfile).

Esto es lo que puede leer en la documentación de Vagrant sobre el comando:

Un error común es que la opción --vagrantfile empaquetará un Vagrantfile que se usa cuando se usa vagrant init con este cuadro. Este no es el caso. En cambio, un Vagrantfile se carga y lee como parte del proceso de carga de Vagrant cuando se usa la caja. Para obtener más información, lea sobre el orden de carga de Vagrantfile.

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

Cuando termine, tendrá un archivo package.box.

3- Copia todos estos archivos (/ config, / database, Vagrantfile, package.box, etc.) y pégalos en tu Computadora 2 justo donde quieres instalar tu máquina virtual (en mi caso D: / VVV).

Ahora tiene una copia de todo lo que necesita en el host de su computadora 2.

4- ejecuta esto: vagrant box add package.box --name VVV

(El --name se usa para nombrar su máquina virtual. En mi caso se llama VVV) (Puede usar --force si ya tiene una máquina virtual con este nombre y desea sobrescribirla. (¡Use con cuidado!))

Esto descomprimirá su nueva máquina virtual vagabunda.

5- Cuando hayas terminado, ejecuta: vagrant up

La máquina se instalará y debería verla en el "Administrador de cajas de máquinas virtuales de Oracle". Si no puede ver la máquina virtual, intente ejecutar el cuadro de Oracle VM como administrador (haga clic derecho -> Ejecutar como administrador)

Ahora puede tener todo bien, pero recuerde ver si sus hosts son como esperaba:

c:/windows/system32/hosts

6- Tal vez sea una buena idea copiar su archivo de host de su Computadora 1 a su Computadora 2. O copiar las líneas que necesita. En mi caso, estos son los hosts que necesito:

192.168.50.4 test.dev
192.168.50.4 vvv.dev
...

Donde 192.168.50.4 es la IP de mi máquina virtual y test.dev y vvv.dev están desarrollando hosts.

Espero que esto pueda ayudarlo :) Estaré feliz si envía sus comentarios.

Algunas particularidades de mi caso que puedes encontrar:

Cuando corrí vagrant up, hubo un problema con mysql, no estaba funcionando. Tuve que ejecutar en el servidor virtual (haga clic derecho en la máquina virtual de Oracle -> Mostrar consola):apt-get install mysql-server

Después de esto, volví a correr vagabundo y todo estaba funcionando pero sin datos en las bases de datos. Así que hice un mysqldump all-tables desde la Computadora 1 y las subí a la Computadora 2.

OTRAS NOTAS: Mi máquina virtual no está exactamente en la Computadora 1 y la Computadora 2. Por ejemplo, hice hace algún tiempo una configuración interna para usar NFS (para acelerar las carpetas de sincronización del servidor) y necesitaba ejecutar nuevamente este comando en la Computadora 2 anfitrión:vagrant plugin install vagrant-winnfsd

gtamborero
fuente
0

A partir de 2019 hay un subcomando: vagrant box repackage

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

Puedes encontrar name providery versioncorriendovagrant box list

vagrant box list
macinbox (virtualbox, 10.14.5)

La salida vagrant box repackagees un archivo llamado package.boxque es básicamente un archivo tgz cuyo contenido se puede enumerar a continuación:

tar tzf package.box
./metadata.json
./box.ovf
./Vagrantfile
./box-disk001.vmdk
Tiago Lopo
fuente