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:
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
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.
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