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 cat
a 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_ran
arquivo 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 bash
sessão de depuração :
docker exec -i container_name bash
Enquanto o contêiner estiver em execução, você também poderá remover already_ran
e executar manualmente o entrypoint.sh
script para executá -lo novamente, se precisar depurar dessa maneira.