"No se ha especificado ningún comando" de la imagen / contenedor de la ventana acoplada reimportada

16

Estoy tratando de tomar un contenedor acoplable 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 --version
Docker version 1.10.1, build 9e83765
docker pull ubuntu
docker run --name u1 -dit ubuntu:latest
docker export -o exported u1
docker stop u1
docker rm u1
docker import exported ubuntu:imported
docker run --name u1 -dit ubuntu:imported
docker: Error response from daemon: No command specified.

En ese ejemplo, primero extraemos una imagen (ubuntu) y creamos / ejecutamos un contenedor con éxito u1. Luego exportamos ese contenedor a un archivo ( exported), detenemos / eliminamos el contenedor, importamos el archivo a una nueva imagen ( ubuntu:imported) e intentamos ejecutar un nuevo contenedor desde él. Fracasa.

Garra Verde
fuente

Respuestas:

16

docker exportno exporta todo sobre el contenedor, solo el sistema de archivos. Por lo tanto, al volver a importar el volcado a una nueva imagen acoplable, se deben especificar marcas 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 contenido CMD ["/usr/bin/supervisord"], entonces importe su volcado de esta manera:

docker import \
--change 'CMD ["/usr/bin/supervisord"]' \
path/to/dump.tar imagename:tagname
Garra Verde
fuente
2
Puede ejecutar docker inspect imagename:tagnamecomparando el original y el importado. No tuve suerte con import/ exporty --change, aunque todo funciona bien con save/ load.
Earcam
2

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" msSQL

docker import "C:\Users\oscar\Desktop\sqlTestMS.tar" mssql

Sin embargo, no pudimos encontrar el comando para ejecutarlo. La solución fue enumerar todos los contenedores en la máquina exportadora y mirar el comando ejecutado.

docker ps

ingrese la descripción de la imagen aquí

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

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

Cuando exporta un contenedor, pierde su propio historial que contiene capas de imágenes 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 comenzar su proceso inicial con el comando cmd. Creo que no hay error. Es una función de dockerfile para la reutilización.

pmoksuz
fuente
Estoy anulando el punto de entrada en la solución al problema original solamente. Nada se anula durante la exportación / importación.
Greendrake
hola @DrakeES mi respuesta acaba de actualizar. Le explico lo que sucede cuando exporta un contenedor.
pmoksuz
0

Lo tengo trabajando con estos pasos adicionales:

  1. Cree Dockerfile de la siguiente manera:

    FROM ubuntu:imported
    ENTRYPOINT bash
    
  2. Construir nueva imagen:

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

    docker run --name u1 -dit ubuntu:importedwithdockerfile
    

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

030
fuente
-1

puede utilizar docker loadcomandos para cargar imágenes de archivo de almacenamiento. Este comando importará el archivo de imagen y los argumentos juntos.

Jian Pei
fuente
1
¿Qué es el archivo "archivo" en este caso y cómo crearlo?
Greendrake
2
@Greendrake docker loady docker saveopere en imágenes de contenedor (a partir de las cuales se crean contenedores), docker importy docker exportopere en contenedores.
Michael Hampton