Wie Sie den docker desktop logs Befehl verwenden, um Docker Desktop Logs 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 desktop logs effektiv nutzen können, um Protokolle (Logs) Ihrer Docker-Container anzuzeigen und zu analysieren. Das Verständnis von Container-Protokollen ist entscheidend für das Debugging von Anwendungen und die Überwachung ihres Verhaltens.

Dieses praktische Lab führt Sie durch die Anzeige grundlegender Container-Protokolle und zeigt anschließend, wie Sie diese Protokolle nach Priorität, Zeitraum und der spezifischen Einheit (Container oder Service), die die Protokolle generiert, filtern können. Am Ende dieses Labs werden Sie in der Lage sein, den Befehl docker desktop logs sicher anzuwenden, um wertvolle Einblicke in Ihre containerisierten Anwendungen zu gewinnen.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container 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") subgraph Lab Skills docker/run -.-> lab-555143{{"Wie Sie den docker desktop logs Befehl verwenden, um Docker Desktop Logs anzuzeigen"}} docker/stop -.-> lab-555143{{"Wie Sie den docker desktop logs Befehl verwenden, um Docker Desktop Logs anzuzeigen"}} docker/rm -.-> lab-555143{{"Wie Sie den docker desktop logs Befehl verwenden, um Docker Desktop Logs anzuzeigen"}} docker/logs -.-> lab-555143{{"Wie Sie den docker desktop logs Befehl verwenden, um Docker Desktop Logs anzuzeigen"}} end

Grundlegende Docker Desktop Logs anzeigen

In diesem Schritt lernen Sie, wie Sie grundlegende Logs von Docker-Containern anzeigen können. Logs sind essenziell für das Debugging und die Überwachung Ihrer in Containern laufenden Anwendungen.

Zuerst starten wir einen einfachen Container, der eine Ausgabe generiert. Wir verwenden das hello-world-Image, ein sehr kleines Image, das eine Nachricht ausgibt und sich dann beendet.

docker run hello-world

Sie sollten eine ähnliche Ausgabe sehen, die anzeigt, dass der Docker-Daemon das Image heruntergeladen und den Container erfolgreich ausgeführt hat:

Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
2db29710123e: Pull complete
Digest: sha256:f52335ce493178fc15f729218f180e9988e31c374a6ce98da40cbb890f97f10e
Status: Downloaded newer image for hello-world:latest

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

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (Assuming it was not already locally available.)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To learn more, try the following commands:
 docker run -it ubuntu bash
 docker images
 docker ps
 docker stop <containerid>
 docker rm <containerid>
To get started with Docker Desktop, visit:
 https://www.docker.com/products/docker-desktop

Die Ausgabe, die Sie sehen, sind die Standardausgabe (stdout) und Standardfehler (stderr) Streams des Containers. Docker erfasst diese Streams und stellt sie als Logs zur Verfügung.

Nun starten wir einen Container, der aktiv bleibt und kontinuierlich Logs generiert. Wir verwenden das alpine-Image und führen einen einfachen Befehl aus, der alle 5 Sekunden eine Nachricht ausgibt.

Zuerst laden wir das alpine-Image herunter:

docker pull alpine

Sie sollten eine Ausgabe sehen, die den Download des Images anzeigt:

Using default tag: latest
latest: Pulling from library/alpine
... (Ausgabe mit Download-Fortschritt)
Digest: sha256:...
Status: Downloaded newer image for alpine:latest
docker.io/library/alpine:latest

Nun starten wir den alpine-Container im Detached-Modus (-d), sodass er im Hintergrund läuft, und vergeben einen Namen (--name mylogger) zur einfachen Referenz. Der Befehl while true; do echo "Hello from mylogger at $(date)"; sleep 5; done gibt alle 5 Sekunden eine Nachricht mit dem aktuellen Datum aus.

docker run -d --name mylogger alpine sh -c 'while true; do echo "Hello from mylogger at $(date)"; sleep 5; done'

Dieser Befehl gibt die Container-ID aus.

Um die Logs des laufenden Containers anzuzeigen, verwenden Sie den Befehl docker logs gefolgt vom Container-Namen oder der ID.

docker logs mylogger

Sie sehen die vom Container generierte Ausgabe, wobei etwa alle 5 Sekunden eine neue Zeile erscheint. Drücken Sie Strg+C, um die Log-Anzeige zu beenden.

Um die Logs in Echtzeit zu verfolgen, verwenden Sie die Option -f (follow):

docker logs -f mylogger

Dadurch werden neue Log-Einträge kontinuierlich angezeigt, sobald sie generiert werden. Drücken Sie Strg+C, um das Verfolgen der Logs zu beenden.

Abschließend stoppen und entfernen wir den erstellten Container:

docker stop mylogger
docker rm mylogger

Dadurch werden die Container-Ressourcen bereinigt.

Logs nach Priorität filtern

In diesem Schritt lernen Sie, wie Sie Docker-Container-Logs basierend auf ihrer Prioritätsstufe filtern können. Während der Standardbefehl docker logs keine eingebaute Prioritätsfilterung wie systemd-journald bietet, können Sie ähnliche Filterung durch Tools wie grep erreichen, um nach bestimmten Schlüsselwörtern oder Mustern in den Log-Ausgaben zu suchen.

Verwenden wir den alpine-Container aus dem vorherigen Schritt. Falls Sie ihn gestoppt und entfernt haben, starten Sie ihn erneut:

docker run -d --name mylogger alpine sh -c 'while true; do echo "INFO: Hello from mylogger at $(date)"; sleep 5; echo "WARNING: Something is happening at $(date)"; sleep 5; echo "ERROR: An error occurred at $(date)"; sleep 5; done'

Dieser Befehl startet den Container im Detached-Modus und gibt Nachrichten mit verschiedenen Prioritäts-Präfixen (INFO, WARNING, ERROR) alle 5 Sekunden aus.

Nun zeigen wir die Logs an und filtern sie, um nur Zeilen mit "ERROR" anzuzeigen. Dazu leiten wir die Ausgabe von docker logs an grep weiter:

docker logs mylogger | grep "ERROR"

Sie sehen nun nur die Log-Zeilen, die das Wort "ERROR" enthalten.

Analog können Sie nur Zeilen mit "WARNING" anzeigen:

docker logs mylogger | grep "WARNING"

Oder nur Zeilen mit "INFO":

docker logs mylogger | grep "INFO"

Sie können Filter auch kombinieren. Um beispielsweise Zeilen mit "WARNING" oder "ERROR" anzuzeigen, verwenden Sie die Option -E mit grep für erweiterte reguläre Ausdrücke und den |-Operator:

docker logs mylogger | grep -E "WARNING|ERROR"

Dies zeigt alle Log-Einträge an, die entweder Warnungen oder Fehler sind.

Beachten Sie, dass diese Methode davon abhängt, dass die Anwendung im Container Logs mit spezifischen Schlüsselwörtern schreibt. Für strukturierteres Logging und erweiterte Filterung sollten Sie einen dedizierten Logging-Treiber oder eine externe Logging-Lösung in Betracht ziehen.

Abschließend stoppen und entfernen Sie den Container:

docker stop mylogger
docker rm mylogger

Logs nach Zeitraum filtern

In diesem Schritt lernen Sie, wie Sie Docker-Container-Logs basierend auf einem bestimmten Zeitraum filtern können. Dies ist nützlich, um Logs aus einem bestimmten Zeitraum zu untersuchen, beispielsweise während eines Incidents oder einer spezifischen Bereitstellung.

Der Befehl docker logs bietet Optionen zur Zeitfilterung von Logs. Wir verwenden erneut den alpine-Container. Falls dieser nicht läuft, starten Sie ihn mit dem gleichen Befehl wie zuvor:

docker run -d --name mylogger alpine sh -c 'while true; do echo "INFO: Hello from mylogger at $(date)"; sleep 5; echo "WARNING: Something is happening at $(date)"; sleep 5; echo "ERROR: An error occurred at $(date)"; sleep 5; done'

Lassen Sie den Container für ein bis zwei Minuten laufen, um Logs zu generieren.

Um Logs anzuzeigen, die seit einem bestimmten Zeitpunkt generiert wurden, verwenden Sie die Option --since. Die Zeit kann in verschiedenen Formaten angegeben werden, einschließlich eines Timestamps (Sekunden seit Epoche), einer relativen Zeit (z.B. 10m für 10 Minuten, 1h für 1 Stunde) oder eines Datums-/Zeit-Strings.

Zeigen wir Logs der letzten 2 Minuten an:

docker logs --since 2m mylogger

Dieser Befehl zeigt alle Log-Einträge des mylogger-Containers an, die in den letzten 2 Minuten generiert wurden.

Sie können auch einen Start- und Endzeitpunkt mit --since und --until angeben. Die Option --until funktioniert ähnlich wie --since und ermöglicht die Angabe eines Zeitpunkts, bis zu dem Logs angezeigt werden sollen.

Um Logs zwischen vor 5 Minuten und vor 1 Minute anzuzeigen:

docker logs --since 5m --until 1m mylogger

Dieser Befehl zeigt Logs aus dem angegebenen Zeitfenster an. Beachten Sie, dass die genaue Ausgabe davon abhängt, wann Sie den Befehl ausführen und wie lange der Container bereits läuft.

Sie können auch spezifische Timestamps verwenden. Um den aktuellen Timestamp zu erhalten, können Sie den Befehl date +%s verwenden.

Lassen Sie uns den Timestamp für vor 1 Minute ermitteln:

date -d "1 minute ago" +%s

Verwenden Sie diesen Timestamp nun mit --until, um Logs bis vor 1 Minute anzuzeigen:

docker logs --until $(date -d "1 minute ago" +%s) mylogger

Dieser Befehl zeigt Logs vom Start des Containers bis vor 1 Minute an.

Die Filterung nach Zeiträumen ist eine leistungsfähige Methode, um Ihre Log-Analyse einzugrenzen und sich auf relevante Ereignisse zu konzentrieren.

Abschließend stoppen und entfernen Sie den Container:

docker stop mylogger
docker rm mylogger

Logs nach Unit filtern

In diesem Schritt lernen Sie, wie Sie Docker-Container-Logs nach der "Unit" filtern, die sie generiert hat. Im Kontext von Docker-Logs bezieht sich die "Unit" typischerweise auf den Container selbst. Während docker logs inhärent für einen einzelnen Container (oder Unit) arbeitet, ist das Verständnis dieses Konzepts wichtig, wenn Sie mit fortgeschritteneren Logging-Systemen arbeiten oder Logs verschiedener Container unterscheiden müssen.

Die primäre Methode zum Filtern von Logs nach Unit in Docker besteht darin, den Containernamen oder die ID beim Befehl docker logs anzugeben. Dies haben wir in den vorherigen Schritten bereits getan.

Lassen Sie uns zwei verschiedene Container starten, um zu sehen, wie ihre Logs getrennt werden. Wir verwenden für beide das alpine-Image, aber mit unterschiedlichen Namen und leicht abweichenden Befehlen.

Stellen Sie zunächst sicher, dass der mylogger-Container aus den vorherigen Schritten gestoppt und entfernt wurde.

docker stop mylogger || true
docker rm mylogger || true

Nun starten wir den ersten Container mit dem Namen container1:

docker run -d --name container1 alpine sh -c 'while true; do echo "Container 1 log at $(date)"; sleep 3; done'

Dieser Container gibt alle 3 Sekunden eine Log-Nachricht aus.

Als nächstes starten wir einen zweiten Container mit dem Namen container2:

docker run -d --name container2 alpine sh -c 'while true; do echo "Container 2 log at $(date)"; sleep 5; done'

Dieser Container gibt alle 5 Sekunden eine Log-Nachricht aus.

Um speziell die Logs von container1 anzuzeigen, verwenden Sie:

docker logs container1

Sie sehen nur die Log-Nachrichten, die von container1 generiert wurden.

Um speziell die Logs von container2 anzuzeigen, verwenden Sie:

docker logs container2

Sie sehen nur die Log-Nachrichten, die von container2 generiert wurden.

Dies demonstriert, wie docker logs inhärent nach dem angegebenen Container (der "Unit") filtert. Wenn Sie ein zentralisiertes Logging-System verwenden würden, das Logs mehrerer Container sammelt, würden Sie typischerweise Metadaten verwenden, die jedem Log-Eintrag zugeordnet sind (wie Containername oder ID), um nach Unit zu filtern.

Während docker logs selbst kein separates --unit-Flag wie einige System-Logging-Tools hat, wird das grundlegende Konzept des Filterns nach der Log-Quelle (dem Container) durch Angabe des Container-Namens oder der ID erreicht.

Abschließend stoppen und entfernen Sie beide Container:

docker stop container1 container2
docker rm container1 container2

Zusammenfassung

In diesem Lab haben Sie die grundlegende Fähigkeit erlernt, Docker-Container-Logs mit dem Befehl docker logs anzuzeigen. Sie begannen mit dem Ausführen einfacher Container wie hello-world und alpine, um zu verstehen, wie Docker Standardausgabe- und Fehlerströme als Logs erfasst. Dieser erste Schritt demonstrierte den grundlegenden Prozess des Zugriffs auf Container-Ausgaben, der für die Überwachung und Fehlerbehebung von in Containern laufenden Anwendungen entscheidend ist.

Aufbauend auf der grundlegenden Log-Anzeige haben Sie erweiterte Filteroptionen kennengelernt, um Logdaten effizient zu verwalten und zu analysieren. Sie haben gelernt, wie Sie Logs nach Prioritätsstufen filtern können, um sich auf kritische Meldungen zu konzentrieren. Darüber hinaus haben Sie das Filtern von Logs nach bestimmten Zeiträumen geübt, um Ereignisse innerhalb eines bestimmten Zeitfensters zu isolieren, sowie nach Unit, um Logs bestimmter Dienste oder Komponenten anzuzeigen. Diese Filtertechniken sind essenziell, um große Mengen an Logdaten zu durchsuchen und schnell relevante Informationen für die Fehlerbehebung und Analyse zu identifizieren.