"No se especificó ningún comando" de la imagen/contenedor de docker reimportada

Estoy tratando de tomar un contenedor docker de una máquina y ejecutarlo en otra y me encuentro con este error:"Respuesta de error del demonio: No se especificó ningún comando".

A continuación se muestra un ejemplo simplificado que muestra el problema:

docker --versionDocker version 1.10.1, build 9e83765docker pull ubuntudocker run --name u1 -dit ubuntu:latestdocker export -o exported u1docker stop u1docker rm u1docker import exported ubuntu:importeddocker run --name u1 -dit ubuntu:importeddocker: Error response from daemon: No command specified.

En ese ejemplo, primero extraemos una imagen (ubuntu) y creamos/ejecutamos con éxito el contenedor u1 de ella. Luego exportamos ese contenedor a un archivo (exported), detener/eliminar el contenedor, importar el archivo en una nueva imagen (ubuntu:imported) e intente ejecutar un nuevo contenedor a partir de él. Falla.

docker export no exporta todo sobre el contenedor, solo el sistema de archivos. Por lo tanto, al importar el volcado de nuevo a una nueva imagen de docker, es necesario especificar indicadores adicionales para recrear el contexto.

Por ejemplo, si el contenedor original funcionaba bien porque el Dockerfile que se utilizó para crear su imagen tenía CMD ["/usr/bin/supervisord"] en él, luego importe su volcado de esta manera:

docker import \--change 'CMD ["/usr/bin/supervisord"]' \path/to/dump.tar imagename:tagname

puedes usar docker load comando para cargar imágenes desde un archivo comprimido .este comando importará el archivo de imagen y los argumentos juntos.

Recibí este error al intentar exportar e importar docker microsoft/mssql-server-linux.

https://hub.docker.com/r/microsoft/mssql-server-linux/

Comandos para exportar e importar:

docker export --output "C:\Users\oscar\Desktop\sqlTestMS.tar" msSQLdocker import "C:\Users\oscar\Desktop\sqlTestMS.tar" mssql

Sin embargo, no pudimos encontrar el comando para ejecutarlo. La solución consistía en enumerar todos los contenedores en la máquina exportadora y observar el comando ran.

docker ps

enter image description here

A partir de ahí, podríamos averiguar cómo ejecutar el comando correcto:

docker run --name msSQL -p 1401:1433 -d mssql:latest /opt/mssql/bin/sqlservr

Cuando exporta un contenedor, pierde su propio historial que contiene capas de imagen y metadatos. Entonces su contenedor perdió sus estados pid.

Cada contenedor debe tener un proceso inicial (raíz). Está anulando el punto de entrada predeterminado en el dockerfile como bash. [editado] Creo que incluso si no lo anula, usa el valor predeterminado, no definido en la imagen base de ubuntu. Por lo tanto, debe iniciar su proceso inicial con el comando cmd. Creo que no hay ningún error. Es una característica de dockerfile para la reutilización.

si usa import

docker save nginx:alpine | ssh rmeote-host docker import -sha256:f6098fc18511abbbfe9e52ed0d0ccc1fbe4f7b018ee1cd85392999aa92ebba1b# we see errorsdocker container run -d -p 2020:80  nginx:alpinedocker: Error response from daemon: No command specified.See 'docker run --help'.

si usa load

docker save nginx:alpine | ssh remote-host "cat - | docker load"Loaded image: nginx:alpinedocker container run --name nginx -dp 2020:80 nginx:alpine7cc8836bef1e276f8aa986a09186e9e227542be3b094b082b9ab1f6d3c290a99docker psCONTAINER ID   IMAGE          COMMAND                  CREATED         STATUS        PORTS                                   NAMES7cc8836bef1e   nginx:alpine   "/docker-entrypoint.…"   2 seconds ago   Up 1 second   0.0.0.0:2020->80/tcp, :::2020->80/tcp   nginx

Lo tengo funcionando con estos pasos adicionales:

  1. Cree Dockerfile de la siguiente manera:

    FROM ubuntu:importedENTRYPOINT bash
  2. Construye una nueva imagen:

    docker build -t ubuntu:importedwithdockerfile .
  3. Ahora se ejecutará:

    docker run --name u1 -dit ubuntu:importedwithdockerfile

Sin embargo, aún no está claro por qué la imagen simplemente exportada y luego importada no funciona de inmediato. ¿Es un error?