Wie man den docker container logs Befehl verwendet, um Container-Ausgaben anzuzeigen

DockerDockerBeginner
Jetzt üben

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

In diesem Lab lernen Sie, wie Sie den Befehl docker container logs effektiv nutzen können, um die Ausgaben Ihrer Docker-Container anzuzeigen. Wir beginnen mit der Ausführung eines einfachen Containers, der Logs generiert, und erkunden dann die grundlegende Verwendung von docker logs, um diese Ausgaben abzurufen.

Anschließend lernen Sie, wie Sie die Log-Ausgaben durch die Einbindung von Zeitstempeln und detaillierten Informationen verbessern können. Abschließend behandeln wir, wie Sie Logs basierend auf Zeit filtern können, um Ausgaben seit einem bestimmten Zeitpunkt anzuzeigen oder den Ausgabeende (tail) zu verfolgen, sowie wie Sie Logs bis zu einem bestimmten Zeitpunkt anzeigen können. Dieses Lab bietet praktische Erfahrung mit essenziellen Docker-Logging-Techniken zur Überwachung und Fehlerbehebung Ihrer containerisierten Anwendungen.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker(("Docker")) -.-> docker/ImageOperationsGroup(["Image Operations"]) docker/ContainerOperationsGroup -.-> docker/run("Run a Container") docker/ContainerOperationsGroup -.-> docker/stop("Stop Container") docker/ContainerOperationsGroup -.-> docker/rm("Remove Container") docker/ContainerOperationsGroup -.-> docker/logs("View Container Logs") docker/ImageOperationsGroup -.-> docker/pull("Pull Image from Repository") subgraph Lab Skills docker/run -.-> lab-555112{{"Wie man den docker container logs Befehl verwendet, um Container-Ausgaben anzuzeigen"}} docker/stop -.-> lab-555112{{"Wie man den docker container logs Befehl verwendet, um Container-Ausgaben anzuzeigen"}} docker/rm -.-> lab-555112{{"Wie man den docker container logs Befehl verwendet, um Container-Ausgaben anzuzeigen"}} docker/logs -.-> lab-555112{{"Wie man den docker container logs Befehl verwendet, um Container-Ausgaben anzuzeigen"}} docker/pull -.-> lab-555112{{"Wie man den docker container logs Befehl verwendet, um Container-Ausgaben anzuzeigen"}} end

Ausführen eines Containers, der Logs generiert

In diesem Schritt lernen Sie, wie Sie einen Docker-Container ausführen, der Logs erzeugt. Logs sind essenziell für die Fehlerbehebung und Überwachung von Anwendungen, die in Containern laufen. Wir verwenden dafür ein einfaches hello-world-Image, da es eine Nachricht ausgibt und dann beendet wird – ein guter Ausgangspunkt, um grundlegendes Container-Logging zu verstehen.

Zuerst laden wir das hello-world-Image von Docker Hub. Dadurch stellen wir sicher, dass das Image lokal verfügbar ist, bevor wir einen Container daraus starten.

docker pull hello-world

Sie sollten eine Ausgabe sehen, die anzeigt, dass das Image heruntergeladen wird.

Using default tag: latest
latest: Pulling from library/hello-world
...
Status: Downloaded newer image for hello-world:latest
docker.io/library/hello-world:latest

Nun starten wir einen Container mit dem hello-world-Image. Der Befehl docker run erstellt und startet einen neuen Container. Standardmäßig erfasst Docker die Standardausgabe (stdout) und Standardfehlerausgabe (stderr) des Container-Prozesses und speichert sie als Logs.

docker run hello-world

Wenn Sie diesen Befehl ausführen, wird der hello-world-Container gestartet, eine Nachricht in Ihrem Terminal ausgegeben und dann beendet. Diese Nachricht ist die Ausgabe, die Docker als Logs erfasst.

Hello from Docker!
This message shows that your installation appears to be working correctly.
...

Obwohl die Ausgabe bei einfachen Containern wie hello-world direkt im Terminal angezeigt wird, müssen Sie für im Hintergrund laufende Container oder komplexere Anwendungen den Befehl docker logs verwenden, um ihre Ausgabe anzuzeigen. Wir werden den docker logs-Befehl in den nächsten Schritten genauer untersuchen.

Grundlegende Container-Logs anzeigen

Im vorherigen Schritt haben wir einen hello-world-Container ausgeführt, der eine Nachricht auf der Konsole ausgab und sich dann beendete. Während dies für eine kurze Demonstration nützlich war, laufen reale Anwendungen oft kontinuierlich im Hintergrund. Um die Ausgaben (Logs) solcher Container anzuzeigen, verwenden wir den Befehl docker logs.

Zuerst starten wir einen Container, der aktiv bleibt und kontinuierlich Ausgaben generiert. Wir verwenden ein einfaches ubuntu-Image und führen einen Befehl aus, der regelmäßig eine Nachricht ausgibt. Wir starten diesen Container im Detached-Modus (-d), sodass er im Hintergrund läuft. Zusätzlich vergeben wir ihm einen Namen (my-logging-container) zur einfachen Identifikation.

docker pull ubuntu
docker run -d --name my-logging-container ubuntu /bin/bash -c 'while true; do echo "Hello from the container at $(date)"; sleep 5; done'

Der Befehl docker pull ubuntu lädt das Ubuntu-Image herunter. Der docker run-Befehl startet einen neuen Container namens my-logging-container im Detached-Modus. Der im Container ausgeführte Befehl /bin/bash -c 'while true; do echo "Hello from the container at $(date)"; sleep 5; done' ist ein einfaches Shell-Skript, das alle 5 Sekunden eine Nachricht mit dem aktuellen Datum und der Uhrzeit ausgibt.

Sie sehen eine Container-ID in Ihrer Konsole, was anzeigt, dass der Container im Hintergrund gestartet wurde.

Unable to find image 'ubuntu:latest' locally
latest: Pulling from library/ubuntu
...
Status: Downloaded newer image for ubuntu:latest
sha256:...

Nun, da unser Container läuft und Logs generiert, können wir diese mit dem Befehl docker logs gefolgt vom Container-Namen oder der ID anzeigen.

docker logs my-logging-container

Dieser Befehl zeigt alle Logs an, die der my-logging-container seit seinem Start generiert hat. Sie sollten eine Reihe von "Hello from the container..."-Nachrichten mit Zeitstempeln sehen.

Hello from the container at ...
Hello from the container at ...
Hello from the container at ...
...

Der docker logs-Befehl ist ein grundlegendes Werkzeug zur Überprüfung der Container-Ausgaben, was entscheidend für das Verständnis ihres Verhaltens und die Fehlerdiagnose ist.

Logs mit Zeitstempeln und Details anzeigen

Im vorherigen Schritt haben wir die grundlegenden Logs eines laufenden Containers betrachtet. Während die Ausgabe selbst nützlich ist, fehlt oft der Kontext, wie z.B. wann jeder Log-Eintrag generiert wurde. Docker bietet Optionen, um Zeitstempel und weitere Details zu den Logs hinzuzufügen.

Um Logs mit Zeitstempeln anzuzeigen, können wir das Flag -t oder --timestamps mit dem docker logs-Befehl verwenden. Dies fügt jedem Log-Eintrag einen Zeitstempel voran, der anzeigt, wann er in die Standardausgabe oder Standardfehlerausgabe des Containers geschrieben wurde.

Lassen Sie uns die Logs unseres my-logging-container mit Zeitstempeln anzeigen:

docker logs -t my-logging-container

Sie sehen nun die Logs mit einem Zeitstempel am Anfang jeder Zeile. Die Zeitstempel folgen dem RFC3339Nano-Format (z.B. 2023-10-27T10:30:00.123456789Z).

2023-10-27T10:30:00.123456789Z Hello from the container at ...
2023-10-27T10:30:05.123456789Z Hello from the container at ...
2023-10-27T10:30:10.123456789Z Hello from the container at ...
...

Zeitstempel sind entscheidend für die Log-Analyse, insbesondere wenn man die Abfolge von Ereignissen verstehen oder feststellen möchte, wann ein bestimmtes Problem aufgetreten ist.

Eine weitere nützliche Option ist das Flag -f oder --follow, das es ermöglicht, die Logs in Echtzeit zu verfolgen. Dies ähnelt der Verwendung des Befehls tail -f für eine Log-Datei. Probieren wir dies mit unserem Container aus:

docker logs -f my-logging-container

Dieser Befehl zeigt die vorhandenen Logs an und zeigt dann kontinuierlich neue Log-Einträge an, sobald sie vom Container generiert werden. Sie sehen alle 5 Sekunden neue "Hello from the container..."-Nachrichten erscheinen.

Um das Verfolgen der Logs zu beenden, drücken Sie Strg+C.

Die Kombination der Flags -t und -f ist eine gängige Praxis, um Container-Logs in Echtzeit mit Zeitstempeln zu überwachen:

docker logs -tf my-logging-container

Dies bietet eine Live-Ansicht der Container-Ausgabe und erleichtert es, das Verhalten des Containers zu beobachten und Probleme direkt zu debuggen.

Logs ab einem bestimmten Zeitpunkt anzeigen oder die Ausgabe beschränken

In diesem Schritt untersuchen wir, wie man Container-Logs anzeigen kann, die nach einem bestimmten Zeitpunkt generiert wurden, oder nur die neuesten Log-Einträge betrachtet. Dies ist besonders nützlich bei Containern, die bereits lange laufen und eine große Menge an Logs erzeugt haben.

Um Logs anzuzeigen, die seit einem bestimmten Zeitpunkt generiert wurden, können Sie das Flag --since verwenden. Der Wert für --since kann entweder ein Zeitstempel (wie die mit dem -t-Flag angezeigten) oder eine relative Zeitspanne sein (z.B. 10m für 10 Minuten, 1h für 1 Stunde).

Lassen wir einige Sekunden verstreichen, damit unser my-logging-container weitere Logs generiert. Anschließend zeigen wir die Logs der letzten 30 Sekunden an:

sleep 30
docker logs --since 30s my-logging-container

Dieser Befehl zeigt nur die Log-Einträge an, die in den letzten 30 Sekunden generiert wurden. Die Ausgabe ähnelt den vollständigen Logs, enthält aber nur die neuesten Einträge.

Hello from the container at ...
Hello from the container at ...
Hello from the container at ...
... (nur Logs der letzten 30 Sekunden)

Eine weitere häufige Anforderung ist die Anzeige nur der letzten paar Zeilen der Logs, ähnlich wie beim tail-Befehl. Dies erreichen Sie mit dem Flag --tail, gefolgt von der Anzahl der gewünschten Zeilen.

Lassen Sie uns die letzten 5 Zeilen der Logs unseres Containers anzeigen:

docker logs --tail 5 my-logging-container

Dieser Befehl gibt nur die 5 neuesten Log-Einträge des Containers aus.

Hello from the container at ...
Hello from the container at ...
Hello from the container at ...
Hello from the container at ...
Hello from the container at ... (die letzten 5 Zeilen)

Sie können --since und --tail mit anderen Flags wie -t und -f kombinieren, um spezifischere Ansichten Ihrer Container-Logs zu erhalten. Zum Beispiel, um die letzten 10 Zeilen mit Zeitstempeln anzuzeigen:

docker logs -t --tail 10 my-logging-container

Diese Optionen bieten leistungsstarke Möglichkeiten, Container-Logs zu filtern und anzuzeigen, wodurch es einfacher wird, schnell die benötigten Informationen zu finden.

Logs bis zu einem bestimmten Zeitpunkt anzeigen

Zusätzlich zur Anzeige von Logs ab einem bestimmten Zeitpunkt können Sie auch Logs anzeigen, die bis zu einem bestimmten Zeitpunkt generiert wurden, indem Sie das --until-Flag verwenden. Dies ist nützlich, um Logs bis zu einem bestimmten Zeitpunkt zu untersuchen, beispielsweise vor dem Auftreten eines Problems.

Der Wert für --until kann ebenfalls ein Zeitstempel oder eine relative Zeitspanne sein.

Lassen wir erneut einige Sekunden verstreichen, um sicherzustellen, dass weitere Logs generiert werden.

sleep 10

Nun zeigen wir die Logs unseres my-logging-container an, die bis vor 10 Sekunden generiert wurden.

docker logs --until 10s my-logging-container

Dieser Befehl zeigt alle Log-Einträge vom Start des Containers bis etwa 10 Sekunden vor Ausführung des Befehls an. Sie sehen die anfänglichen Log-Einträge, aber die neuesten werden ausgeschlossen.

Hello from the container at ...
Hello from the container at ...
... (Logs bis vor 10 Sekunden)

Sie können --since und --until kombinieren, um Logs innerhalb eines bestimmten Zeitraums anzuzeigen. Zum Beispiel, um Logs anzuzeigen, die zwischen vor 2 Minuten und vor 30 Sekunden generiert wurden:

docker logs --since 2m --until 30s my-logging-container

Dieser Befehl zeigt nur die Log-Einträge an, die in diesen spezifischen Zeitraum fallen.

Abschließend können Sie den laufenden Container bereinigen, indem Sie ihn stoppen und entfernen.

docker stop my-logging-container
docker rm my-logging-container

Der Befehl docker stop sendet ein Stopp-Signal an den Container, und docker rm entfernt den Container.

Das Verständnis, wie man Logs nach Zeit filtern kann, ist eine wertvolle Fähigkeit für die Fehlersuche und Analyse des Verhaltens Ihrer Docker-Container.

Zusammenfassung

In diesem Lab haben wir gelernt, wie man Container-Logs mit dem Befehl docker logs anzeigt. Wir begannen mit der Ausführung eines einfachen hello-world-Containers, um zu verstehen, wie Docker die Standardausgabe als Logs erfasst.

Anschließend haben wir die grundlegende Verwendung von docker logs untersucht, um die Ausgabe eines Containers abzurufen. Wir haben auch gelernt, wie man die Log-Ausgabe durch die Einbindung von Zeitstempeln und detaillierten Informationen verbessert, sowie wie man Logs nach Zeit filtern kann - sei es seit einem bestimmten Zeitpunkt oder bis zu einem bestimmten Zeitpunkt - und wie man die Ausgabe beschränkt, um die neuesten Log-Einträge anzuzeigen.