Estou tentando pegar um contêiner docker de uma máquina e executá-lo em outra e encontro 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 extraímos uma imagem (ubuntu) e criamos/executamos o contêiner com sucesso u1
a partir dela. 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. Falha.
docker export
não exporta tudo sobre o contêiner - apenas o sistema de arquivos. Portanto, ao importar o despejo de volta para uma nova imagem docker, sinalizadores adicionais precisam ser especificados para recriar o contexto.Por exemplo, se o contêiner original estava funcionando bem porque o Dockerfile que foi usado para criar sua imagem estava
CMD ["/usr/bin/supervisord"]
nele, importe seu dump desta maneira:você pode usar
docker load
o comando para carregar imagens do arquivo compactado. este comando importará o arquivo de imagem e os argumentos juntos.Recebi este erro ao tentar exportar e importar docker
microsoft/mssql-server-linux
.https://hub.docker.com/r/microsoft/mssql-server-linux/
Comandos para exportar e importar:
No entanto, não foi possível encontrar o comando para executá-lo. A solução foi listar todos os contêineres na máquina de exportação e observar o comando executado.
A partir daí, poderíamos descobrir como executar o comando correto:
Quando você exporta um contêiner, ele perde o próprio histórico que contém camadas de imagem e metadados. Portanto, seu contêiner perdeu seus estados pid.
Todo contêiner deve ter um processo inicial (raiz). Você está substituindo o ponto de entrada padrão no dockerfile como bash. [editado] Acho que nem você substitui ele usa padrão, não definido na imagem base do ubuntu. Portanto, você deve iniciar seu processo inicial com o comando cmd. Acho que não tem bug. É um recurso dockerfile para reutilização.
Funcionou com estas etapas adicionais:
Crie o Dockerfile da seguinte forma:
Criar nova imagem:
Agora vai rodar:
No entanto, ainda não está claro por que a imagem simplesmente exportada e depois importada não funciona imediatamente. Isso é um inseto?
se estiver usando
import
se estiver usando
load