Dodaj zaznaczenie u góry skryptu Entrypoint
Docker naprawdę musi zaimplementować to jako nową funkcję, ale oto kolejna opcja obejścia sytuacji, w których masz punkt wejścia, który kończy się po sukcesie lub niepowodzeniu, co może utrudnić debugowanie.
Jeśli nie masz jeszcze skryptu Entrypoint, utwórz taki, który uruchamia dowolne polecenia dla twojego kontenera. Następnie u góry tego pliku dodaj te wiersze do 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
Aby upewnić się, że cat
połączenie jest utrzymywane, konieczne może być podanie TTY. Korzystam z kontenera za pomocą skryptu Entrypoint w następujący sposób:
docker run -t --entrypoint entrypoint.sh image_name
Spowoduje to, że skrypt uruchomi się raz, tworząc plik wskazujący, że już się uruchomił (w wirtualnym systemie plików kontenera). Następnie możesz ponownie uruchomić kontener, aby przeprowadzić debugowanie:
docker start container_name
Po ponownym uruchomieniu kontenera already_ran
plik zostanie znaleziony, co spowoduje zatrzymanie skryptu Entrypoint cat
(który po prostu czeka wiecznie na dane wejściowe, które nigdy nie nadejdą, ale utrzymują kontener przy życiu). Następnie możesz wykonać bash
sesję debugowania :
docker exec -i container_name bash
Podczas działania kontenera możesz również usunąć already_ran
i ręcznie uruchomić entrypoint.sh
skrypt, aby go ponownie uruchomić, jeśli chcesz w ten sposób debugować.