Adicione uma verificação ao topo do seu script do Ponto de Entrada
O Docker realmente precisa implementar isso como um novo recurso, mas aqui está outra opção de solução alternativa para situações nas quais você tem um Ponto de Entrada que termina após sucesso ou falha, o que pode dificultar a depuração.
Se você ainda não possui um script de Ponto de Entrada, crie um que execute os comandos necessários para o seu contêiner. Em seguida, na parte superior deste arquivo, adicione estas linhas a entrypoint.sh:
# Run once, hold otherwise
if [ -f "already_ran" ]; then
echo "Already ran the Entrypoint once. Holding indefinitely for debugging."
cat
fi
touch already_ran
# Do your main things down here
Para garantir que cata conexão seja mantida, você pode precisar fornecer um TTY. Estou executando o contêiner com meu script Entrypoint da seguinte forma:
docker run -t --entrypoint entrypoint.sh image_name
Isso fará com que o script seja executado uma vez, criando um arquivo que indica que ele já foi executado (no sistema de arquivos virtual do contêiner). Você pode reiniciar o contêiner para executar a depuração:
docker start container_name
Quando você reinicia o contêiner, o already_ranarquivo será encontrado, fazendo com que o script do Ponto de Entrada seja interrompido cat(o que apenas espera eternamente pela entrada que nunca chegará, mas mantém o contêiner ativo). Você pode executar uma bashsessão de depuração :
docker exec -i container_name bash
Enquanto o contêiner estiver em execução, você também poderá remover already_rane executar manualmente o entrypoint.shscript para executá -lo novamente, se precisar depurar dessa maneira.