Fügen Sie oben in Ihrem Entrypoint-Skript ein Häkchen hinzu
Docker muss dies wirklich als neue Funktion implementieren. Hier ist jedoch eine weitere Problemumgehungsoption für Situationen, in denen Sie einen Entrypoint haben, der nach Erfolg oder Misserfolg beendet wird, was das Debuggen erschweren kann.
Wenn Sie noch kein Entrypoint-Skript haben, erstellen Sie eines, das alle Befehle ausführt, die Sie für Ihren Container benötigen. Fügen Sie dann oben in dieser Datei die folgenden Zeilen hinzu 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
Um sicherzustellen, dass cat
die Verbindung besteht, müssen Sie möglicherweise eine TTY bereitstellen. Ich führe den Container mit meinem Entrypoint-Skript folgendermaßen aus:
docker run -t --entrypoint entrypoint.sh image_name
Dadurch wird das Skript einmal ausgeführt und eine Datei erstellt, die angibt, dass es bereits ausgeführt wurde (im virtuellen Dateisystem des Containers). Sie können den Container dann neu starten, um das Debuggen durchzuführen:
docker start container_name
Wenn Sie den Container neu starten, wird die already_ran
Datei gefunden, wodurch das Entrypoint-Skript zum Stillstand kommt cat
(das nur für immer auf Eingaben wartet, die niemals kommen, aber den Container am Leben erhalten). Sie können dann eine Debugging- bash
Sitzung ausführen :
docker exec -i container_name bash
Während der Container ausgeführt wird, können Sie already_ran
das entrypoint.sh
Skript auch entfernen und manuell ausführen, um es erneut auszuführen , wenn Sie auf diese Weise debuggen müssen.