Zum Inhalt

Docker-Logs automatisch begrenzen

Veröffentlicht am 27. August 2026 · Geschätzte Lesezeit: 3 Minuten

Container schreiben ihre Ausgaben normalerweise in Protokolldateien. Ohne Begrenzung kann ein gesprächiger oder fehlerhafter Dienst damit nach und nach die Festplatte füllen. Der Docker-Logtreiber local rotiert und komprimiert diese Daten automatisch. Die Umstellung dauert etwa 10 Minuten und gilt nach dem Neuerstellen der Container.

Voraussetzungen

  • Ein Linux-Server mit Docker Engine und Docker Compose
  • Ein Benutzerkonto mit sudo-Rechten
  • Etwa 10 Minuten Wartungszeit für den Docker-Neustart
  • Eine Sicherung der vorhandenen Docker-Konfiguration

1. Aktuellen Logtreiber prüfen

Führe den Befehl auf dem Docker-Server aus. Er zeigt den derzeitigen Standard-Logtreiber an:

docker info --format '{{.LoggingDriver}}'

Zeigt die Ausgabe json-file, ist ohne zusätzliche Optionen keine automatische Größenbegrenzung aktiv. Einzelne Container können trotzdem abweichend konfiguriert sein.

Prüfe deshalb zusätzlich einen laufenden Container. Ersetze <container-name> durch seinen Namen, zum Beispiel homeassistant:

docker inspect --format '{{.HostConfig.LogConfig.Type}} {{json .HostConfig.LogConfig.Config}}' <container-name>

2. Docker-Konfiguration sichern

Lege vor der Änderung eine Sicherung an. Der Befehl kopiert eine vorhandene daemon.json; falls sie noch nicht existiert, erscheint nur ein Hinweis:

sudo cp -a /etc/docker/daemon.json /etc/docker/daemon.json.bak

Datei noch nicht vorhanden?

Meldet cp, dass die Datei nicht existiert, ist das bei einer Standardinstallation normal. Überspringe die Sicherung und lege die Datei im nächsten Schritt neu an.

3. Vorhandene Einstellungen erhalten

Öffne die Docker-Daemon-Konfiguration auf dem Server:

sudo nano /etc/docker/daemon.json

Ist die Datei leer oder noch nicht vorhanden, füge diesen vollständigen Inhalt ein. Die Werte begrenzen jeden neu erstellten Container auf fünf komprimierte Logdateien mit jeweils höchstens 20 MB:

{
  "log-driver": "local",
  "log-opts": {
    "max-size": "20m",
    "max-file": "5",
    "compress": "true"
  }
}

Enthält die Datei bereits Einstellungen, ergänze nur log-driver und log-opts innerhalb der vorhandenen äußeren geschweiften Klammern. Doppelte Schlüssel oder ein fehlendes Komma machen die JSON-Datei ungültig.

Keine vorhandenen Einstellungen überschreiben

Ein blindes Ersetzen kann andere Docker-Optionen wie eigene Datenverzeichnisse, Registry-Mirrors oder Netzwerkbereiche entfernen. Bearbeite eine vorhandene Datei deshalb immer als Ganzes.

4. JSON und Docker-Konfiguration prüfen

Prüfe zuerst die JSON-Syntax. Eine erfolgreiche Prüfung gibt den formatierten Inhalt aus:

python3 -m json.tool /etc/docker/daemon.json

Lass danach Docker die vollständige Daemon-Konfiguration validieren:

sudo dockerd --validate --config-file=/etc/docker/daemon.json

Erst wenn configuration OK erscheint, solltest du fortfahren.

5. Docker neu starten

Der Neustart unterbricht alle Container kurz. Führe ihn deshalb zu einem passenden Zeitpunkt aus:

sudo systemctl restart docker

Prüfe anschließend den Dienst und den neuen Standardtreiber:

sudo systemctl --no-pager --full status docker
docker info --format '{{.LoggingDriver}}'

Die zweite Ausgabe muss jetzt local lauten.

Docker startet nicht mehr

Stelle die Sicherung wieder her und starte Docker erneut. Wenn vorher keine daemon.json existierte, verschiebe stattdessen die fehlerhafte Datei aus dem Weg.

sudo cp -a /etc/docker/daemon.json.bak /etc/docker/daemon.json
sudo systemctl restart docker

6. Bestehende Container neu erstellen

Die Änderung wirkt nur auf neu erstellte Container. Wechsle in jeden Compose-Projektordner und erstelle die Container neu. Volumes und darin gespeicherte Nutzdaten bleiben dabei erhalten:

docker compose up -d --force-recreate

Vorher Backup prüfen

--force-recreate löscht keine benannten Volumes. Trotzdem solltest du vor Änderungen an wichtigen Diensten ein aktuelles Backup ihrer Daten und Compose-Dateien haben. Verwende hier nicht docker compose down -v, denn -v würde Volumes löschen.

Kontrolliere danach einen neu erstellten Container. Ersetze <container-name> erneut durch den tatsächlichen Namen:

docker inspect --format '{{.HostConfig.LogConfig.Type}} {{json .HostConfig.LogConfig.Config}}' <container-name>

Die Ausgabe sollte den Treiber local zeigen. Leere Optionen sind möglich, weil dann die in daemon.json gesetzten Standardwerte gelten.

7. Logs weiter benutzen

Die gewohnten Docker-Befehle funktionieren mit dem local-Treiber weiterhin. Dieser Befehl zeigt beispielsweise die letzten 100 Zeilen:

docker logs --tail 100 <container-name>

Greife nicht direkt auf Logdateien unter dem Docker-Datenverzeichnis zu. Diese Dateien verwaltet ausschließlich der Docker-Daemon; direktes Bearbeiten kann die Protokollierung beschädigen.

8. Quellen und Stand

Die Konfiguration wurde am 27. August 2026 mit der offiziellen Dokumentation abgeglichen:

Fertig

Neue Container verwenden jetzt automatisch rotierende, komprimierte Logs. Prüfe mit docker info --format '{{.LoggingDriver}}' den Standard und mit docker logs --tail 100 <container-name>, ob die Ausgabe eines neu erstellten Containers weiterhin lesbar ist.