tag run library images hub dockers docker containers docker-registry

run - dockers images



¿Cómo mover contenedores Docker entre diferentes hosts? (6)

No puedo encontrar una manera de mover Docker ejecutando contenedores de un host a otro.

¿Hay alguna forma en que pueda llevar mis contenedores a repositorios como lo hacemos para las imágenes? Actualmente, no estoy usando volúmenes de datos para almacenar los datos asociados con aplicaciones que se ejecutan dentro de contenedores. Por lo tanto, algunos datos residen dentro de los contenedores, que quiero persistir antes de rediseñar la configuración.


Alternativamente, si no desea ingresar a un repositorio:

  1. Exportar el contenedor a un tarball

    docker export <CONTAINER ID> > /home/export.tar

  2. Mueve tu tarball a una nueva máquina

  3. Importarlo de vuelta

    cat /home/export.tar | docker import - some-name:latest


De la documentación de Docker:

docker export no exporta el contenido de los volúmenes asociados con el contenedor. Si se monta un volumen encima de un directorio existente en el contenedor, la docker export exportará el contenido del directorio subyacente , no el contenido del volumen. Consulte Copia de seguridad, restauración o migración de volúmenes de datos en la guía del usuario para ver ejemplos sobre la exportación de datos en un volumen.

Otras herramientas externas: para mover un contenedor con su volumen de datos asociado, puede usar Flocker https://clusterhq.com/flocker/introduction/


Intenté muchas soluciones para esto, y esta es la que funcionó para mí:

1. comprometer / guardar el contenedor en una nueva imagen:

  1. ++ confirma el contenedor:
    # docker stop
    # docker commit CONTAINER_NAME
    # docker save --output IMAGE_NAME.tar IMAGE_NAME: TAG

ps: "Nuestro contenedor CONTAINER_NAME tiene un volumen montado en ''/ var / home''" (debe inspeccionar su contenedor para especificar su ruta de volumen: # docker inspeccionar CONTAINER_NAME)

  1. ++ guardar su volumen: usaremos una imagen de ubuntu para hacer la cosa.
    # mkdir backup
    # docker run --rm --volumes-from CONTAINER_NAME -v $ {pwd} / backup: / backup ubuntu bash -c "cd / var / home && tar cvf /backup/volume_backup.tar".

Ahora, cuando mira $ {pwd} / backup, encontrará nuestro volumen en formato tar.
Hasta ahora, tenemos la imagen de nuestro contenedor ''IMAGE_NAME.tar'' y su volumen ''volume_backup.tar''.

Ahora puede, recrear el mismo contenedor antiguo en un nuevo host.


Lo que finalmente funcionó para mí, después de muchos manuales confusos y tutoriales confusos, ya que Docker obviamente está en el momento de escribir por encima de las expectativas infladas , es:

  1. Guarde la imagen de la ventana acoplable en el archivo:
    docker save image_name > image_name.tar
  2. copiar en otra máquina
  3. en esa otra máquina acoplable, ejecute la carga acoplable de la siguiente manera:
    cat image_name.tar | docker load

Exportar e importar, como se propone en otras respuestas, no exporta puertos y variables, que pueden ser necesarios para que se ejecute su contenedor. Y puede terminar con cosas como "Sin comando especificado", etc. ... cuando intenta cargarlo en otra máquina.

Entonces, la diferencia entre guardar y exportar es que el comando guardar guarda la imagen completa con historial y metadatos, mientras que el comando exportar solo exporta la estructura de archivos (sin historial ni metadatos).

No es necesario decir que, si ya tiene esos puertos en el hipervisor de Docker que está importando, por algún otro contenedor de Docker, terminará en conflicto y tendrá que volver a configurar los puertos expuestos.


No puede mover un contenedor de Docker en ejecución de un host a otro.

Puede confirmar los cambios en su contenedor a una imagen con docker commit , mover la imagen a un nuevo host y luego iniciar un nuevo contenedor con docker run . Esto preservará cualquier dato que su aplicación haya creado dentro del contenedor.

Nb: no conserva los datos almacenados dentro de los volúmenes; debe mover los volúmenes de datos manualmente al nuevo host.


Utilice este script: https://github.com/ricardobranco777/docker-volumes.sh

Esto preserva los datos en volúmenes.

Ejemplo de uso:

# Stop the container docker stop $CONTAINER # Create a new image docker commit $CONTAINER $CONTAINER # Save image docker save -o $CONTAINER.tar $CONTAINER # Save the volumes (use ".tar.gz" if you want compression) docker-volumes.sh $CONTAINER save $CONTAINER-volumes.tar # Copy image and volumes to another host scp $CONTAINER.tar $CONTAINER-volumes.tar $USER@$HOST: # On the other host: docker load -i $CONTAINER.tar docker create --name $CONTAINER [<PREVIOUS CONTAINER OPTIONS>] $CONTAINER # Load the volumes docker-volumes.sh $CONTAINER load $CONTAINER-volumes.tar # Start container docker start $CONTAINER