Einführung
Anwendungen, die innerhalb von Containern ausgeführt werden, schreiben Status- und Fehlermeldungen normalerweise in die Standardausgabe und die Standardfehlerausgabe. Das ist ein wichtiges Entwurfsmuster in containerisierten Systemen: Statt dass jeder Container eigene komplexe Logdateien verwaltet, erfasst die Container-Laufzeit diesen Datenstrom und stellt ihn zentral bereit.
Das ist ein Grund dafür, dass Container-Images häufig anders aufgebaut sind als herkömmliche Serversoftware. Auf Containerplattformen ist es meist besser, nützliche Ausgaben über stdout/stderr zu schreiben, als Logs ausschließlich in lokalen Dateien zu verbergen.
Für Entwicklerinnen und Entwickler sowie für Systemadministratoren ist der Zugriff auf diese Logs entscheidend, um zu verstehen, was innerhalb von Containern im Hintergrund geschieht. In realen Plattformen wie Kubernetes bildet dieses stdout/stderr-Modell ebenfalls die Grundlage für zentrale Logging-Pipelines.
In diesem Lab lernen Sie:
- Einen Container auszuführen, der fortlaufend Ausgaben erzeugt.
- Die bisher erzeugten Logs abzurufen.
- Die Logs in Echtzeit zu verfolgen, um die laufende Anwendung zu überwachen.
- Die Überwachung sicher zu beenden, ohne die Anwendung zu stoppen.
Einen Prozess im Hintergrund starten
In diesem Schritt starten Sie einen Docker-Container im Detached-Modus. Um eine reale Anwendung zu simulieren, führen wir ein einfaches Skript aus, das jede Sekunde eine Meldung ausgibt.
Wenn Sie einen Container im Detached-Modus mit dem Flag -d starten, läuft er im Hintergrund. Daher sehen Sie seine Ausgabe nicht sofort in Ihrem Terminal.
Die Ausgabe ist trotzdem vorhanden. Docker erfasst sie, anstatt sie direkt in Ihre aktuelle Shell-Sitzung zu streamen.
Führen Sie den folgenden Befehl aus, um den Container zu starten:
docker run -d --name web-log-app alpine sh -c "while true; do echo 'Application is running...'; sleep 1; done"
Aufschlüsselung des Befehls:
docker run -d: Startet den Container im Hintergrund.--name web-log-app: Gibt dem Container den Namen „web-log-app“.alpine: Verwendet das schlanke Image „Alpine Linux“.sh -c "...": Das ist der Befehl, der innerhalb des Containers ausgeführt wird. Er führt ein Shell-Skript mit einer Endlosschleife (while true) aus. In jeder Schleifeniteration gibtechoeine Meldung aus undsleep 1pausiert eine Sekunde.
Überprüfen Sie, ob der Container läuft:
docker ps
In der Ausgabe sollte web-log-app als aktiver Container aufgeführt sein.
Vorhandene Logs anzeigen
Da der Container im Hintergrund läuft, wird seine Ausgabe in Ihrer aktuellen Terminalansicht nicht angezeigt. Docker erfasst diese Ausgabe und stellt sie mit dem Befehl docker logs bereit.
In diesem Schritt rufen Sie die Logs ab, die seit dem Start des Containers erzeugt wurden.
Führen Sie den folgenden Befehl aus:
docker logs web-log-app
Sie sehen eine Liste von Meldungen mit dem Text „Application is running...“.
So funktioniert der Befehl:
Der Befehl docker logs ruft alle bis zu diesem Zeitpunkt gespeicherten Logs ab und gibt sie auf dem Bildschirm aus. Anschließend wird der Befehl sofort beendet, und Sie kehren zur Shell-Eingabeaufforderung zurück. Das ist nützlich, um den bisherigen Verlauf einer Anwendung zu prüfen oder ihren Startstatus zu kontrollieren.
docker logs zeigt also die bisherige Ausgabe und öffnet keine interaktive Shell innerhalb des Containers. Es handelt sich um eine schreibgeschützte Ansicht der Ausgaben, die der Hauptprozess des Containers bisher geschrieben hat.
Wenn Sie den Befehl nach einigen Sekunden erneut ausführen, sehen Sie eine längere Liste, da der Container im Hintergrund weiterhin Logs erzeugt.
docker logs web-log-app
Logs in Echtzeit überwachen
Manchmal reicht es nicht aus, nur vergangene Logs anzuzeigen. Möglicherweise müssen Sie die Logs während ihrer Entstehung beobachten, um ein Problem zu debuggen oder den laufenden Datenverkehr zu überwachen. Das ist vergleichbar mit dem Linux-Befehl tail -f.
In diesem Schritt verwenden Sie das Flag -f (follow), um die Logs in Echtzeit zu streamen.
Führen Sie den folgenden Befehl aus:
docker logs -f web-log-app
Was geschieht dabei?
Die Shell-Eingabeaufforderung erscheint nicht wieder. Stattdessen ist Ihr Terminal nun mit dem Log-Datenstrom des Containers verbunden. Jede Sekunde sehen Sie eine neue Meldung mit dem Text „Application is running...“.
Das ist konzeptionell vergleichbar mit tail -f. Die Datenquelle ist jedoch der von Docker erfasste Log-Datenstrom und nicht eine normale Datei, die Sie direkt lesen.
Dieser Modus ist besonders nützlich, um das Verhalten einer Anwendung während ihrer Ausführung zu beobachten.
Verbindung trennen und aufräumen
Ihr Terminal wartet derzeit auf die Logs. Der Container läuft weiterhin, und der Befehl docker logs wartet auf neue Ausgaben.
Um die Logüberwachung zu beenden und zur Shell-Eingabeaufforderung zurückzukehren, senden Sie ein Interrupt-Signal.
Drücken Sie auf Ihrer Tastatur Ctrl+C.
Wichtiges Konzept:
Wenn Sie hier Ctrl+C drücken, beenden Sie den Befehl docker logs – also die Anzeige der Logs. Der Container selbst wird dadurch nicht beendet. Der Container web-log-app läuft weiterhin im Hintergrund und erzeugt Logs.
Diese Unterscheidung ist im Betrieb wichtig. Einen Container zu beobachten und einen Container zu steuern sind unterschiedliche Aktionen. Die Verwechslung dieser beiden Aktionen ist ein häufiger Fehler bei Anfängern.
Sie können dies überprüfen, indem Sie die Liste der laufenden Prozesse anzeigen:
docker ps
web-log-app sollte weiterhin in der Liste erscheinen.
Aufräumen:
Da Sie das Lab abgeschlossen haben, stoppen und entfernen Sie nun den Container, um Ressourcen freizugeben. Dazu verwenden Sie docker rm -f. Dieser Befehl erzwingt das Entfernen eines laufenden Containers und kombiniert das Stoppen mit dem Entfernen.
docker rm -f web-log-app
Zusammenfassung
In diesem Lab haben Sie die Grundlagen für den Zugriff auf Docker-Container-Logs kennengelernt. Sie haben Folgendes geübt:
- Einen Prozess im Hintergrund ausführen: Mit
docker run -dbleibt Ihr Terminal für andere Aufgaben verfügbar. - Vorhandene Logs anzeigen: Mit
docker logs <container_name>zeigen Sie die bisherige Ausgabe an. - Logs in Echtzeit überwachen: Mit
docker logs -f <container_name>streamen Sie die Ausgabe während ihrer Entstehung. - Die Verbindung trennen: Mit
Ctrl+Cbeenden Sie die Loganzeige, während die Anwendung weiterläuft.
Diese Kenntnisse sind für das Debugging und die Überwachung containerisierter Anwendungen in jeder Umgebung unverzichtbar.



