Aggiungi un segno di spunta all'inizio dello script Entrypoint
Docker deve davvero implementarlo come una nuova funzionalità, ma ecco un'altra soluzione alternativa per le situazioni in cui si dispone di un Entrypoint che termina in caso di esito positivo o negativo, il che può rendere difficile il debug.
Se non si dispone già di uno script Entrypoint, crearne uno che esegua qualsiasi comando (i) necessario (i) per il proprio contenitore. Quindi, all'inizio di questo file, aggiungi queste righe 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
Per assicurarsi che cat
mantenga la connessione, potrebbe essere necessario fornire un TTY. Sto eseguendo il container con il mio script Entrypoint in questo modo:
docker run -t --entrypoint entrypoint.sh image_name
Questo farà eseguire lo script una volta, creando un file che indica che è già stato eseguito (nel filesystem virtuale del contenitore). È quindi possibile riavviare il contenitore per eseguire il debug:
docker start container_name
Quando riavvii il contenitore, il already_ran
file verrà trovato, causando lo stallo dello script Entrypoint cat
(che attende per sempre l'input che non arriverà mai, ma mantiene attivo il contenitore). È quindi possibile eseguire una bash
sessione di debug :
docker exec -i container_name bash
Mentre il contenitore è in esecuzione, è anche possibile rimuovere already_ran
ed eseguire manualmente lo entrypoint.sh
script per eseguirlo nuovamente, se è necessario eseguire il debug in questo modo.