"Nenhum comando especificado" da imagem/contêiner do docker reimportada

Estou tentando pegar um contêiner docker de uma máquina e executá - lo em outra e encontrar este erro:"Resposta de erro do daemon: nenhum comando especificado".

Abaixo está um exemplo simplificado mostrando o 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.

Nesse exemplo, primeiro puxamos uma imagem (ubuntu) e criamos / executamos com sucesso o contêiner u1 dele. Em seguida, exportamos esse contêiner para um arquivo (exported), pare / remova o contêiner, importe o arquivo para uma nova imagem (ubuntu:imported) e tente executar um novo contêiner a partir dele. Falha.

docker export não exporta tudo sobre o contêiner-apenas o sistema de arquivos. Portanto, ao importar o dump de volta para uma nova imagem do docker, sinalizadores adicionais precisam ser especificados para recriar o contexto.

Por exemplo, se o contêiner original estava funcionando bem porque o Dockerfile usado para criar sua imagem tinha CMD ["/usr/bin/supervisord"] nele, importe seu despejo dessa maneira:

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

você pode usar docker load comando para carregar imagens do arquivo .este comando importará arquivos de imagem e args juntos.

Recebi esse erro ao tentar exportar e importar o 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

No entanto, não conseguimos encontrar o comando para executá-lo. A solução estava listando todos os contêineres na máquina exportadora e observando o comando executado.

docker ps

enter image description here

A partir daí, poderíamos descobrir como executar o comando correto:

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

Quando você exporta um contêiner, ele perde seu próprio histórico, que contém camadas de imagem e metadados. Então seu contêiner perdeu seus Estados pid.

Cada contêiner deve ter um processo inicial (raiz). Você está substituindo o ponto de entrada padrão no dockerfile como bash. [editado] acho que mesmo você não substitui usa padrão, não definido na imagem base do ubuntu. Portanto, você deve iniciar seu processo inicial com o comando cmd. Eu acho que não há bug. É um recurso dockerfile para reutilização.

se estiver usando 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'.

se estiver usando 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

Consegui trabalhar com essas etapas adicionais:

  1. Criar Dockerfile da seguinte forma:

    FROM ubuntu:importedENTRYPOINT bash
  2. Criar nova imagem:

    docker build -t ubuntu:importedwithdockerfile .
  3. Agora vai correr:

    docker run --name u1 -dit ubuntu:importedwithdockerfile

No entanto, ainda não está claro por que a imagem simplesmente exportada e importada não funciona imediatamente. Isso é um bug?