No puedo encontrar una forma de mover contenedores en ejecución Docker de un host a otro.
¿Hay alguna forma de que pueda enviar mis contenedores a repositorios como lo hacemos con las imágenes? Actualmente, no estoy usando volúmenes de datos para almacenar los datos asociados con aplicaciones que se ejecutan dentro de contenedores. Entonces, algunos datos residen dentro de los contenedores, que quiero conservar antes de rediseñar la configuración.
docker
containers
docker-registry
Dinesh Reddy
fuente
fuente
docker save
es para guardar imágenes, no contenedores. docs.docker.com/engine/reference/commandline/saveRespuestas:
No puede mover un contenedor 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 comenzar un nuevo contenedor condocker run
. Esto conservará los datos que su aplicación haya creado dentro del contenedor.Nb: no conserva los datos que se almacenan dentro de los volúmenes; necesita mover los volúmenes de datos manualmente a un nuevo host.
fuente
docker stop x
; 2. cometer cambios urdocker commit -p x x
; 3. guarde el contenedor en la imagendocker save -o x x
; 4. mueva el archivo x al nuevo host y en el nuevo host cargue la nueva imagendokcer load -i x
(si inició el contenedor con la-v
opción, también tendrá que mover estos archivos al nuevo host); 5. ejecute esta imagen condocker run (-v is required to mount these files if needed)
Alternativamente, si no desea enviar a un repositorio:
Exportar el contenedor a un tarball
Mueva su tarball a una nueva máquina
Importarlo de nuevo
fuente
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 mi artículo en un punto de expectativas infladas , es:
docker save image_name > image_name.tar
cat image_name.tar | docker load
Exportar e importar, como se propone en otras respuestas, no exporta puertos y variables, que podrían ser necesarios para que su contenedor se ejecute. Y puede terminar con cosas como "Sin comando especificado", etc. Cuando intente cargarlo en otra máquina.
Entonces, la diferencia entre guardar y exportar es que el comando de guardar guarda la imagen completa con historial y metadatos, mientras que el comando de exportación exporta solo la estructura de archivos (sin historial ni metadatos).
No hace falta decir que, si ya tiene esos puertos tomados en el hipervisor de la ventana acoplable que está importando, por algún otro contenedor de la ventana acoplable, terminará en conflicto y tendrá que reconfigurar los puertos expuestos.
fuente
De la documentación de Docker:
fuente
Utilice este script: https://github.com/ricardobranco777/docker-volumes.sh
Esto hace conservar los datos en los volúmenes.
Uso de ejemplo:
fuente
Probé muchas soluciones para esto, y esta es la que funcionó para mí:
Confirmar / guardar el contenedor en una nueva imagen:
# 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 inspect CONTAINER_NAME)
# 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 mire $ {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 volver a crear el mismo contenedor antiguo en un nuevo host.
fuente