Contenido

Tutorial de docker save: exportar y cargar imágenes (save, load, export, import)

docker save y docker load sirven para trasladar imágenes; docker export y docker import trabajan con el sistema de archivos de un contenedor, por lo que la configuración de la imagen puede ser distinta. Consulta los conceptos básicos de las imágenes en Imágenes de Docker.

Sintaxis

docker save [OPTIONS] IMAGE [IMAGE...]
docker load [OPTIONS]
docker export [OPTIONS] CONTAINER
docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]

Parámetros

ComandoParámetroDescripción
save-o, --output stringEscribe en el archivo indicado; si no se especifica, envía la salida a STDOUT
save--platform stringsGuarda solo la plataforma indicada. Puedes separar varias con comas, por ejemplo, linux/amd64,linux/arm64/v8
load-i, --input stringLee el archivo tar indicado; si no se especifica, lee desde STDIN
load--platform stringsCarga solo la plataforma indicada
load-q, --quietNo muestra la salida de la carga
export-o, --output stringEscribe el sistema de archivos del contenedor en el archivo indicado
import-c, --change listAplica instrucciones de Dockerfile a la imagen creada
import-m, --message stringDefine el mensaje de confirmación de la imagen importada
import--platform stringDefine la plataforma si el servidor admite varias plataformas

Ejemplos

Guardar, comprimir con gzip y cargar una imagen

$ docker save -o nginx.tar nginx:1.30-alpine

$ ls -lh nginx.tar
-rw-------    1 root     root       25.7M Oct 25 15:31 nginx.tar

$ docker save nginx:1.30-alpine | gzip > nginx.tar.gz && ls -lh nginx.tar.gz
-rw-r--r--    1 root     root       24.9M Oct 25 15:31 nginx.tar.gz

$ docker load -i nginx.tar.gz
Loaded image: nginx:1.30-alpine

$ docker images nginx
IMAGE               ID             DISK USAGE   CONTENT SIZE   EXTRA
nginx:1.30-alpine   47928bf67eb6       93.5MB           27MB   U
  • docker save -o escribe la imagen en un archivo tar; al usarlo directamente, el archivo de 25.7MB contiene los datos de la imagen.
  • Esta imagen ocupa 24.9MB después de comprimirla con gzip, solo 0.8MB menos que el tar original. La compresión aporta poco.
  • docker load -i puede leer directamente un archivo comprimido con gzip y cargar nginx:1.30-alpine.
  • Después de cargarla, puedes ver la imagen con docker images; DISK USAGE muestra 93.5MB, un valor distinto del tamaño del archivo de almacenamiento.

Exportar e importar un sistema de archivos

$ docker export web -o web-fs.tar && ls -lh web-fs.tar
-rw-------    1 root     root       60.5M Oct 25 15:31 web-fs.tar

$ docker import web-fs.tar myweb:snapshot
sha256:56e3f92534ca8c5aedd8de576ae2433f1864d3d3b51de847a8dc8dd7d503da4d

$ docker run --rm myweb:snapshot cat /usr/share/nginx/html/hi.txt
hello

$ docker image inspect -f '{{.Config.Cmd}}' nginx:1.30-alpine
[nginx -g daemon off;]

$ docker image inspect -f '{{.Config.Cmd}}' myweb:snapshot
[]

$ docker run --rm myweb:snapshot
docker: Error response from daemon: no command specified

Run 'docker run --help' for more information
  • docker export escribe el sistema de archivos del contenedor web en un tar; después, docker import crea la imagen myweb:snapshot.
  • La imagen importada sigue incluyendo los archivos: si indicas cat /usr/share/nginx/html/hi.txt, puedes leer hello.
  • El .Config.Cmd de nginx:1.30-alpine contiene nginx -g daemon off;, mientras que el de myweb:snapshot es un arreglo vacío [].
  • Como la imagen importada no tiene un comando predeterminado, docker run sin argumentos muestra no command specified; debes indicar explícitamente un comando al ejecutarla.

Capítulos relacionados

Ejercicios

Ejercicio: Guarda nginx:1.30-alpine en un archivo comprimido con gzip y, después, carga la imagen desde ese archivo.

Respuesta
docker save nginx:1.30-alpine | gzip > nginx.tar.gz
docker load -i nginx.tar.gz

Preguntas frecuentes

¿Qué diferencia hay entre docker save y docker export?

docker save guarda una imagen para poder restaurarla después con docker load; docker export exporta el sistema de archivos de un contenedor y, al combinarlo con docker import, crea una imagen nueva.

¿Cuánto espacio se ahorra al comprimir con gzip el resultado de docker save?

En este caso, el archivo tar de nginx:1.30-alpine ocupa 25.7MB y, después de comprimirlo con gzip, 24.9MB. La diferencia es pequeña.

¿Por qué aparece no command specified al ejecutar docker run directamente después de docker import?

El .Config.Cmd de myweb:snapshot, la imagen importada, es un arreglo vacío [], así que no tiene un comando predeterminado; puedes leer el archivo indicando cat /usr/share/nginx/html/hi.txt, pero si la ejecutas sin indicar un comando, aparece no command specified.

Actualizado 26 de octubre de 2026