“Nenhum comando especificado” da imagem / container do docker reimportado

6

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

Nesse exemplo, primeiro obtemos uma imagem (ubuntu) e criamos / executamos o contêiner u1 com êxito. Em seguida, exportamos esse contêiner para um arquivo ( exported ), paramos / removemos o contêiner, importamos o arquivo para uma nova imagem ( ubuntu:imported ) e tentamos executar um novo contêiner a partir dele. Isso falha.

Alguém pode explicar como fazer isso funcionar?

    
por Greendrake 15.02.2016 / 06:09

5 respostas

5

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, é necessário especificar sinalizadores adicionais para recriar o contexto.

Por exemplo, se o contêiner original estava rodando bem porque o Dockerfile que foi usado para criar sua imagem tinha CMD ["/usr/bin/supervisord"] , então importe seu dump desta forma:

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

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] Eu acho que mesmo que você não o substitua, usa padrão, não definido na imagem base do Ubuntu. Então você deve iniciar seu processo inicial com o comando cmd. Eu acho que não há bug. É um recurso dockerfile para reutilização.

    
por 11.04.2016 / 23:11
0

Entendi trabalhando com essas etapas adicionais:

  1. Crie o Dockerfile da seguinte forma:

    FROM ubuntu:imported
    ENTRYPOINT bash
    
  2. Construir nova imagem:

    docker build -t ubuntu:importedwithdockerfile .
    
  3. Agora será executado:

    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?

    
por 20.02.2017 / 15:23
0

Recebi este erro ao tentar exportar e importar o docker microsoft/mssql-server-linux .

link

Comandos para exportar e importar:

docker export --output "C:\Users\oscar\Desktop\sqlTestMS.tar" msSQL

docker 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 de exportação e observando o comando executado.

docker ps

De lá, podemos descobrir como executar o comando correto:

docker run --name msSQL -p 1401:1433 -d mssql:latest /opt/mssql/bin/sqlservr
    
por 12.10.2018 / 13:32
-1

você pode usar o comando docker load para carregar imagens do arquivo morto. este comando importará o arquivo de imagem e os argumentos juntos.

    
por 17.05.2018 / 04:58

Tags