Esta é uma solução quando o contêiner do docker sai normalmente e você pode editar o Dockerfile.
Geralmente, quando um contêiner docker é executado, um aplicativo é servido executando um comando. Na referência do Dockerfile ,
As instruções CMD e ENTRYPOINT definem qual comando é executado ao executar um contêiner. ... Dockerfile deve especificar pelo menos um dos comandos CMD ou ENTRYPOINT.
Quando você constrói uma imagem e não especifica nenhum comando com CMD ou ENTRYPOINT, o comando CMD ou ENTRYPOINT da imagem base seria executado.
Por exemplo, o Dockerfile oficial do Ubuntu tem CMD ["/bin/bash"]
( https://hub.docker.com/_/ubuntu ). Agora, o bin/bash/
comando pode aceitar a entrada e o docker run -it IMAGE_ID
comando anexa STDIN ao contêiner. O resultado é que você obtém um terminal interativo e o contêiner continua em execução.
Quando um comando com CMD ou ENTRYPOINT é especificado no Dockerfile, esse comando é executado ao executar o contêiner. Agora, se este comando puder terminar sem exigir nenhuma entrada, ele será concluído e o contêiner será encerrado. docker run -it IMAGE_ID
vai NÃO fornecer o terminal interativo neste caso. Um exemplo seria a imagem docker construída a partir do Dockerfile abaixo
FROM ubuntu
ENTRYPOINT echo hello
Se você precisar ir para o terminal desta imagem, você precisará manter o contêiner em execução modificando o comando entrypoint.
FROM ubuntu
ENTRYPOINT echo hello && sleep infinity
Depois de executar o contêiner normalmente com docker run IMAGE_ID
, você pode simplesmente ir para outro terminal e usar docker exec -it CONTAINER_ID bash
para obter o terminal do contêiner.