Design wechseln

Docker logs im Detail: 7 Tipps zur schnellen Fehlersuche in Containern

Easton editorial illustration: learning console with milestone tokens

docker logs payment-service – Enter, und der Bildschirm füllt sich mit Zehntausenden INFO-Zeilen. Der Payment-Service in Produktion ist gerade ausgefallen – wo in diesem Log-Strom steckt die eine ERROR-Zeile, die weiterhilft?

Log-Flut, Echtzeit-Monitoring, Filter nach Zeitraum, schnelles Finden von Fehlermeldungen – in kritischen Momenten ist das schwieriger, als man denkt. Dieser Artikel stellt 7 praxisnahe docker logs-Tipps vor – von den Basics bis zu fortgeschrittenen Kombinationen – damit Sie Container-Probleme schnell eingrenzen.

Grundlegende Log-Anzeige

1. Die einfachste Variante

Zuerst die Basis. Diesen Befehl kennen Sie sicher:

docker logs <Container-Name>
# oder mit Container-ID
docker logs abc123def456

Er gibt alle Logs vom Start bis jetzt auf stdout aus. Klingt praktisch – in der Realität scrollt alles wie ein Wasserfall vorbei, und Sie sehen nichts.

Beim ersten Mal war der Container drei Tage gelaufen – Zehntausende Zeilen. Das Terminal raste, und ich starrte minutenlang – ohne eine einzige ERROR-Zeile zu erwischen. Später wurde klar: Für diesen Fall ist der „nackte“ Befehl die falsche Wahl.

Wann lohnt sich dieser Basisbefehl?

Ehrlich gesagt nur in zwei Fällen:

  • Der Container ist gerade erst gestartet, die Logs sind noch überschaubar
  • Sie wollen alle Logs in eine Datei exportieren

Sonst: lieber nicht. Es gibt bessere Wege.

2. Die neuesten N Zeilen anzeigen

Das ist im Alltag der häufigste Trick:

docker logs --tail 50 my-container

--tail zeigt nur die letzten N Zeilen. Ich nehme meist 50 oder 100 – genug für einen ersten Eindruck, ohne unterzugehen.

Praxisbeispiel:

Letzte Woche wurde unser API-Service plötzlich langsam. Mein erster Schritt:

docker logs --tail 100 api-server

In den letzten 100 Zeilen stand sofort eine Warnung zu Database-Connection-Timeout. Das Problem war eingegrenzt – kein Code-Bug, sondern die Datenbank.

Die Idee: Zuerst die neuesten Logs lesen und die Richtung erkennen. Fehlt der Hinweis dort, geht es mit anderen Methoden tiefer.

Wenn Sie unsicher sind, wie viele Zeilen Sie brauchen: Starten Sie mit 50. Reicht nicht, 100 – dann 200. Schrittweise ist effizienter als alles auf einmal.

Echtzeit-Monitoring

3. Log-Stream live verfolgen

Besonders beim Debuggen nützlich – wie tail -f unter Linux:

docker logs -f my-container

Mit -f (follow) laufen neue Log-Zeilen sofort im Terminal auf.

Typische Einsatzfälle:

  1. Beim Container-Start
    Nach dem Deploy Container starten und sofort -f mitlaufen lassen. Fehler in der Config sehen Sie sofort – nicht erst, wenn der Dienst schon down ist.

  2. Bug live mitschneiden
    Tritt ein Fehler nur bei bestimmten Aktionen auf? Ich starte docker logs -f, reproduziere den Fall – und habe die Meldung direkt im Terminal.

Praktische Kombination:

docker logs -f --tail 100 my-container

Sie sehen die letzten 100 Zeilen und verfolgen danach live weiter – guter Überblick vor dem Monitoring.

Ein Kollege starrte einmal eine halbe Stunde auf -f, ohne neue Zeile – der Container war längst gestoppt. Vor -f kurz prüfen: docker ps, ob der Container läuft.

Präzises Filtern

4. Nach Zeitraum filtern

Eine meiner Lieblingsfunktionen. Das Monitoring meldet: „Gestern um 3 Uhr Fehler“ – Sie sehen den Alarm erst morgens, und seitdem sind wieder Tausende Zeilen dazugekommen. Wie finden Sie genau diesen Zeitpunkt?

Mit --since und --until:

# Logs ab einem Zeitpunkt
docker logs --since "2025-12-18T03:00:00" my-container

# Logs in einem Zeitfenster
docker logs --since "2025-12-18T03:00:00" --until "2025-12-18T04:00:00" my-container

Das Format ist ISO 8601 – Sie müssen es nicht auswendig kennen. Docker akzeptiert auch relative Angaben:

# Letzte Stunde
docker logs --since 1h my-container

# Letzte 30 Minuten
docker logs --since 30m my-container

# Seit gestern
docker logs --since 24h my-container

Praxisbeispiel:

Ein Order-Service fiel um 4 Uhr nachts aus. Um 9 Uhr lag schon fünf Stunden Log-Material vor. Ich nutzte:

docker logs --since "2025-12-18T03:30:00" --until "2025-12-18T04:30:00" order-service

Nur eine Stunde um den Ausfall – sofort der Stacktrace zu OutOfMemory. Bei Vollansicht hätte die Suche deutlich länger gedauert.

5. Zeitstempel anzeigen

Sie sehen ERROR in den Logs, wissen aber nicht wann – und können es nicht mit Monitoring-Daten abgleichen. Dann brauchen Sie Zeitstempel:

docker logs -t my-container

-t setzt vor jede Zeile einen Timestamp, etwa so:

2025-12-18T10:23:45.123456789Z [INFO] Server started
2025-12-18T10:23:47.234567890Z [ERROR] Database connection failed

So wissen Sie exakt, wann jede Zeile entstand. Ich kombiniere das gern:

# Letzte 30 Minuten mit Zeitstempel
docker logs -t --since 30m my-container

# Live-Monitoring mit Zeitstempel
docker logs -f -t my-container

Bei Performance-Analysen sind Timestamps Gold wert: Sie sehen, wie lange ein Request dauerte und wo es hakt.

6. Mit grep nach Stichwörtern filtern

Überall INFO, Sie wollen nur ERROR? grep hilft:

docker logs my-container | grep "ERROR"

Nur Zeilen mit „ERROR“ erscheinen. Ein Fallstrick:

Manchmal greift grep nicht!

Container schreiben Logs teils nach stderr statt stdout – die Pipe | verarbeitet standardmäßig nur stdout.

Lösung: stderr nach stdout umleiten:

docker logs my-container 2>&1 | grep "ERROR"

2>&1 leitet stderr (Deskriptor 2) auf stdout (Deskriptor 1) – grep sieht dann alles.

Weitere nützliche Kombinationen:

# 10 Zeilen Kontext um ERROR
docker logs my-container 2>&1 | grep -C 10 "ERROR"

# Groß-/Kleinschreibung ignorieren
docker logs my-container 2>&1 | grep -i "error"

# Die letzten 20 Fehler
docker logs -t my-container 2>&1 | grep -i "error" | tail -20

-C 10 zeigt je 10 Zeilen vor und nach dem Treffer – oft brauchen Sie den Kontext, nicht nur die eine ERROR-Zeile.

Fortgeschrittene Techniken

7. Physischen Speicherort der Log-Datei finden

Container-Logs liegen als Dateien auf dem Host. Wo genau?

docker inspect --format='{{.LogPath}}' my-container

Typische Ausgabe:

/var/lib/docker/containers/abc123.../abc123...-json.log

Wofür ist das gut?

  1. Datei direkt lesen
    Bei sehr großen Logs kann docker logs den Docker-Daemon belasten – manchmal ist direktes Lesen schneller:

    sudo tail -f /var/lib/docker/containers/abc123.../abc123...-json.log
  2. Backup
    Logs archivieren? Datei kopieren:

    sudo cp /var/lib/docker/containers/abc123.../abc123...-json.log ./backup/
  3. Analyse mit Editor-Tools
    In vim oder einem anderen Editor sind Suche und Navigation oft flexibler als reines grep.

Die Datei ist JSON – jede Zeile ein JSON-Objekt, optisch unübersichtlich. Für lesbaren Text bleibt docker logs meist angenehmer.

Logs als Plaintext exportieren:

docker logs my-container > container.log

Reiner Text – gut für Analyse oder Weitergabe.

Best Practices für Produktion

8. Log-Rotation (Festplatte schützen)

In Produktion leicht vergessen – und dann extrem teuer.

Ein echtes Desaster:

Ein Container lief monatelang, Logs wuchsen unbegrenzt, irgendwann war die Host-Festplatte voll. Alle Container fielen aus, die DB konnte nicht mehr schreiben, die Site war down. Zwei Stunden Debugging – Ursache: Log-Dateien.

Wie vermeiden?

Log-Rotation konfigurieren. In /etc/docker/daemon.json:

{
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3"
  }
}

Parameter:

  • max-size: maximal 10 MB pro Datei
  • max-file: höchstens 3 Dateien behalten

Pro Container also höchstens 10 MB × 3 = 30 MB. Ab 10 MB legt Docker eine neue Datei an; ab vier Dateien wird die älteste gelöscht.

Aktivierung:

Nach Änderung an daemon.json Docker neu starten:

sudo systemctl restart docker

Hinweis: Neustart betrifft alle Container – in Produktion ein passendes Wartungsfenster wählen.

Nur für einen Container:

docker run -d \
  --log-opt max-size=10m \
  --log-opt max-file=3 \
  my-image

Andere Container bleiben unverändert.

9. Log-Strategie in Produktion

Bei großen Log-Mengen wird docker logs langsam oder hängt – der Docker-Daemon spürt die Last.

Abwägung nach Projektgröße:

  • Kleine Projekte (1–10 Container):

    • docker logs + Log-Rotation reicht oft
    • Einfach, ohne Extra-Infrastruktur
  • Mittlere und große Projekte (10+ Container, Microservices):

    • Zentrales Logging ist Pflicht
    • Klassiker: ELK (Elasticsearch + Logstash + Kibana)
    • Alternativen: Loki, Fluentd, Splunk

Warum reicht docker logs allein nicht?

  1. Performance: Viele parallele Log-Abfragen belasten den Daemon
  2. Aggregation: Ein Request über zehn Services – Logs liegen in zehn Containern
  3. Historie: Nach Container-Neustart fehlen alte Logs oft in docker logs
  4. Team: Ops, Dev und QA können nicht alle auf dem Server grep-en

Empfehlung:

  • Docker lernen? Erst docker logs sicher beherrschen
  • Solo oder kleines Team? Rotation + docker logs ist ok
  • Produktion mit 10+ Containern? Zentrales Logging planen
  • Microservices? Zentrales Logging ist keine Option, sondern Basis

Fazit

Zurück zum Szenario um 3 Uhr nachts. Heute würde ich so vorgehen:

  1. docker logs --tail 100 payment-service – schneller Blick auf das Neueste
  2. Kein Treffer? Zeitfenster: docker logs --since "2025-12-18T03:00:00" --until "2025-12-18T03:30:00" payment-service
  3. Timestamp + grep: docker logs -t payment-service 2>&1 | grep -i "error" | tail -20

Drei Schritte, höchstens zwei Minuten – Problem eingegrenzt.

Der Wert von docker logs liegt nicht darin, jeden Parameter auswendig zu kennen, sondern die passende Kombination für die Situation zu wählen.

Noch einmal: Läuft Ihr Container in Produktion – jetzt Log-Rotation einrichten. Die paar Zeilen Config können Sie vor voller Festplatte bewahren.

Kurzreferenz

# Basis
docker logs <Container-Name>                    # alle Logs
docker logs --tail 50 <Container-Name>         # letzte 50 Zeilen

# Live
docker logs -f <Container-Name>                # Live-Tracking
docker logs -f --tail 100 <Container-Name>     # letzte 100 Zeilen + Live

# Zeitfilter
docker logs --since 1h <Container-Name>        # letzte Stunde
docker logs --since "2025-12-18T03:00:00" <Container-Name>  # ab Zeitpunkt

# Suche
docker logs -t <Container-Name>                           # Zeitstempel
docker logs <Container-Name> 2>&1 | grep -i "error"      # Fehler suchen
docker logs <Container-Name> 2>&1 | grep -C 10 "error"   # mit Kontext

# Fortgeschritten
docker inspect --format='{{.LogPath}}' <Container-Name>   # Log-Dateipfad
docker logs <Container-Name> > log.txt                   # exportieren

Diese Karte lohnt sich zum Merken – beim nächsten Container-Incident greifen Sie direkt zum passenden Befehl.

7 Tipps für docker logs – vollständiger Leitfaden

Container-Probleme schnell eingrenzen – mit Live-Monitoring, Zeitfilter, grep-Suche, Log-Dateipfad und Best Practices für Produktion

⏱️ Estimated time: 15 min

  1. 1

    Step 1: Grundlegende Log-Viewing-Techniken

    Die einfachsten Befehle:
    • docker logs container-name (alle Logs anzeigen)
    • docker logs --tail=100 container-name (letzte 100 Zeilen)
    • docker logs --tail=100 -f container-name (neueste 100 Zeilen und Live-Tracking)

    Live-Logs:
    • Mit -f Logs in Echtzeit verfolgen: docker logs -f payment-service
    • Ähnlich wie tail -f – ideal zum Überwachen des Container-Status
    • Mit Strg+C beenden

    Formatierte Ausgabe:
    • Mit --timestamps Zeitstempel anzeigen: docker logs --timestamps container-name
    • Erleichtert die Zuordnung zum Zeitpunkt des Fehlers
  2. 2

    Step 2: Zeitfilter und grep-Suche

    Zeitfilter:
    • Mit --since Logs ab einem Zeitpunkt anzeigen:
    docker logs --since 1h payment-service (letzte Stunde)
    docker logs --since 2024-01-01T00:00:00 container-name (ISO-8601-Format)
    • Mit --until Logs bis zu einem Zeitpunkt anzeigen

    grep-Suche:
    • Mit Pipe und grep filtern: docker logs container-name | grep ERROR
    • Groß-/Kleinschreibung ignorieren: docker logs container-name | grep -i error
    • Mit Regex suchen: docker logs container-name | grep -E 'ERROR|FATAL'
  3. 3

    Step 3: Log-Dateipfad und Best Practices für Produktion

    Log-Dateipfad:
    • Docker-Container-Logs liegen unter: /var/lib/docker/containers/<container-id>/<container-id>-json.log
    • Container-ID per docker inspect ermitteln, dann Datei direkt lesen

    Best Practices für Produktion:
    • Log-Aggregation nutzen (ELK, Loki, Fluentd)
    • Log-Rotation konfigurieren, damit Dateien nicht zu groß werden (logging in docker-compose.yml)
    • Strukturiertes Log-Format (JSON)
    • Log-Level filtern
    • Alte Logs regelmäßig bereinigen: docker system prune für ungenutzte Logs

FAQ

Welche praktischen Tipps gibt es für docker logs?
7 praxisnahe Tipps:

1) Live-Logs: docker logs -f container-name

2) Letzte N Zeilen: docker logs --tail=100 container-name

3) Zeitfilter: docker logs --since 2024-01-01T00:00:00 container-name

4) grep-Suche: docker logs container-name | grep ERROR

5) Log-Dateipfad: /var/lib/docker/containers/

6) Formatierte Ausgabe: docker logs --timestamps container-name

7) Best Practices für Produktion: Log-Aggregation, Log-Rotation konfigurieren
Wie sehe ich Docker-Container-Logs in Echtzeit?
Live-Logs:
• Mit -f Logs verfolgen: docker logs -f payment-service
• Ähnlich wie tail -f
• Ideal zum Überwachen des Container-Status
• Mit Strg+C beenden

Neueste N Zeilen und Live-Tracking:
docker logs -f --tail 100 container-name
Zeigt zuerst die letzten 100 Zeilen, dann neue Logs in Echtzeit.
Wie filtere ich Docker-Logs nach Zeit?
Zeitfilter:

Mit --since Logs ab einem Zeitpunkt anzeigen:
• docker logs --since 1h payment-service (letzte Stunde)
• Mit --until Logs bis zu einem Zeitpunkt
• ISO-8601-Zeitstempel: docker logs --since 2024-01-01T00:00:00 container-name

Gängige Zeitformate:
• 1h (letzte Stunde)
• 30m (letzte 30 Minuten)
• 2024-01-01T00:00:00 (fester Zeitpunkt)
Wo werden Docker-Log-Dateien gespeichert?
Log-Dateipfad:
Docker-Container-Logs liegen unter /var/lib/docker/containers/<container-id>/<container-id>-json.log

So prüfen Sie das:
1) Container-ID per docker inspect:
docker inspect -f '{{.Id}}' container-name
2) Log-Datei direkt lesen:
cat /var/lib/docker/containers/<container-id>/<container-id>-json.log

Hinweis: Root-Rechte sind für den Zugriff erforderlich.
Wie verwalte ich Docker-Logs in Produktion?
Best Practices für Produktion:

1) Log-Aggregation (ELK, Loki, Fluentd)

2) Log-Rotation gegen zu große Dateien:
• logging in docker-compose.yml konfigurieren
• max-size und max-file setzen

3) Strukturiertes Log-Format (JSON)

4) Log-Level filtern

5) Alte Logs regelmäßig bereinigen (docker system prune)

Empfehlung: Log-Aggregation für zentrale Suche und Analyse aller Container-Logs.

7 Min. Lesezeit · Veröffentlicht am: 18. Dez. 2025 · Aktualisiert am: 14. Juli 2026

Ähnliche Beiträge

Kommentare

Melde dich mit GitHub an, um einen Kommentar zu hinterlassen

Easton BlogEaston Blog