Ajoutez un chèque en haut de votre script Entrypoint
Docker a vraiment besoin de l'implémenter en tant que nouvelle fonctionnalité, mais voici une autre option de contournement pour les situations dans lesquelles vous avez un Entrypoint qui se termine après un succès ou un échec, ce qui peut rendre le débogage difficile.
Si vous n'avez pas encore de script Entrypoint, créez-en un qui exécute les commandes dont vous avez besoin pour votre conteneur. Ensuite, en haut de ce fichier, ajoutez ces lignes à 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
Pour garantir le cat
maintien de la connexion, vous devrez peut-être fournir un ATS. J'exécute le conteneur avec mon script Entrypoint comme ceci:
docker run -t --entrypoint entrypoint.sh image_name
Cela entraînera l'exécution du script une fois, créant un fichier qui indique qu'il a déjà été exécuté (dans le système de fichiers virtuel du conteneur). Vous pouvez ensuite redémarrer le conteneur pour effectuer le débogage:
docker start container_name
Lorsque vous redémarrez le conteneur, le already_ran
fichier est trouvé, ce qui provoque le blocage du script Entrypoint cat
(qui attend juste indéfiniment une entrée qui ne viendra jamais, mais maintient le conteneur en vie). Vous pouvez ensuite exécuter une bash
session de débogage :
docker exec -i container_name bash
Pendant l'exécution du conteneur, vous pouvez également supprimer already_ran
et exécuter manuellement le entrypoint.sh
script pour le réexécuter, si vous avez besoin de déboguer de cette façon.