Estou tentando pegar um contêiner do docker de uma máquina e executá-lo em outro 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. Falha.
docker inspect imagename:tagname
comparando o original e o importado. Não tive sorte comimport
/export
e--change
, embora tudo funcione bem comsave
/load
.Erro ao tentar exportar e importar janela de encaixe
microsoft/mssql-server-linux
.https://hub.docker.com/r/microsoft/mssql-server-linux/
Comandos para exportar e importar:
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.
A partir daí, descobrimos como executar o comando correto:
fonte
Quando você exporta um contêiner, ele perde seu 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] Eu acho que mesmo você não o substitui, ele usa o 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 de dockerfile para reutilização.
fonte
Trabalhei com estas etapas adicionais:
Crie o Dockerfile da seguinte maneira:
Crie uma nova imagem:
Agora ele será executado:
No entanto, ainda não está claro por que a imagem simplesmente exportada e importada não funciona imediatamente. Isso é um inseto?
fonte
você pode usar o
docker load
comando para carregar imagens do arquivo morto. este comando importará o arquivo de imagem e os argumentos juntos.fonte
docker load
edocker save
operar em imagens de contentores (a partir do qual os recipientes são criadas), enquantodocker import
edocker export
operam em recipientes.