Docker-Log-Rotation einrichten
Was dieser Artikel über Docker-Log-Rotation behandelt
- Warum Container-Logs begrenzt werden müssen.
- Wie Docker Logs standardmässig speichert.
- Wie man Log-Grösse und Anzahl beschränkt.
- Alternativen wie
localund externe Log-Dienste. - Tipps für produktive Setups.
Einleitung: Docker-Log-Rotation einrichten
Docker-Container schreiben standardmässig Logs nach stdout und stderr. Wenn nichts weiter konfiguriert wird, wachsen diese Logs unbegrenzt an und füllen mit der Zeit die Festplatte. Besonders bei wachsenden Anwendungen, Chatbots oder Applikationen mit vielen Anfragen können Logs schnell mehrere Gigabyte erreichen. Log-Rotation sorgt dafür, dass alte Logs gelöscht oder archiviert werden, während aktuelle Logs verfügbar bleiben.
Dieser Artikel zeigt, wie man Docker-Log-Rotation sauber einrichtet.
Wichtige Begriffe
- Log-Driver: Treiber, der Logs speichert oder weiterleitet.
- json-file: Standard-Driver, speichert Logs als JSON.
- local: Treiber, der Logs lokal rotiert.
- Log-Rotation: Regelmässiges Archivieren oder Löschen alter Logs.
- Log-Forwarder: Dienst, der Logs an externe Systeme sendet.
- Retention: Aufbewahrungsdauer.
- max-size: Maximale Grösse einer Log-Datei.
- max-file: Maximale Anzahl rotierter Dateien.
Standardverhalten
Docker speichert Logs mit dem json-file-Driver. Jede Zeile wird in eine JSON-Datei geschrieben. Ohne Begrenzung wachsen diese Dateien unendlich:
/var/lib/docker/containers/<id>/<id>-json.log
Log-Driver pro Container konfigurieren
In compose.yaml:
services:
app:
image: mein-app
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
Das begrenzt jede Log-Datei auf 10 MB und behält drei Dateien.
Global konfigurieren
In /etc/docker/daemon.json:
{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
}
}
Danach Docker neu starten:
sudo systemctl restart docker
Bestehende Container müssen neu erstellt werden, damit die neuen Optionen greifen.
Local-Log-Driver
Der local Driver rotiert automatisch und ist leichtgewichtiger als json-file:
{
"log-driver": "local",
"log-opts": {
"max-size": "10m",
"max-file": "3"
}
}
Logs prüfen
docker logs <container>
docker logs --tail 100 <container>
docker logs --since 1h <container>
Log-Grösse prüfen
sudo du -sh /var/lib/docker/containers/*
Oder spezifisch für einen Container:
sudo ls -lh /var/lib/docker/containers/<id>/<id>-json.log
Logs löschen
Container stoppen:
docker stop <container>
Log-Datei leeren:
sudo sh -c 'truncate -s 0 /var/lib/docker/containers/<id>/<id>-json.log'
Container starten:
docker start <container>
Externe Logs mit syslog
services:
app:
image: mein-app
logging:
driver: "syslog"
options:
syslog-address: "udp://localhost:514"
Logs an Loki oder Splunk
services:
app:
image: mein-app
logging:
driver: "loki"
options:
loki-url: "http://localhost:3100/loki/api/v1/push"
Logrotate für Container-Logs
Für Host-Logs oder Bind-Mount-Logs kann logrotate verwendet werden:
/var/log/containers/*.log {
daily
missingok
rotate 7
compress
delaycompress
notifempty
create 0640 root adm
sharedscripts
}
Tipps
- Auf jeden Fall Grösse und Anzahl begrenzen.
localstattjson-file, wenn keine JSON-Verarbeitung nötig.- Für Produktion externes Logging wie Loki oder Splunk.
- Retention-Policy dokumentieren.
- Logs regelmässig prüfen, ob Rotation funktioniert.
- Nicht Secrets in Logs ausgeben.
Typische Stolpersteine
- Keine Log-Begrenzung: Festplatte läuft voll.
- Global geändert, Container neu: Bestehende Container behalten alten Driver.
- Truncate während Laufzeit: Datenverlust.
- Log-Forwarder nicht erreichbar: Container startet nicht.
- Zu kurze Retention: Fehler nicht mehr nachvollziehbar.
- Falsche Berechtigungen: Logs können nicht gelöscht werden.
Weiterführende Links und Infos
- BotServ.de Docker Logs
- BotServ.de Docker Monitoring
- BotServ.de Docker Volumes
- BotServ.de Docker Backup
FAQ: Docker-Log-Rotation
Werden Logs automatisch gelöscht? Nein, ohne Konfiguration wachsen sie unbegrenzt.
Was ist der beste Log-Driver?
Für lokale Setups local oder json-file mit max-size. Für zentrale Sammlung Loki oder Splunk.
Wie wirken globale Einstellungen? Nur für Container, die danach neu erstellt werden.
Wie oft werden Logs rotiert?
Wenn max-size erreicht ist, nicht nach Zeit.
Soll ich Logs komprimieren? Bei langer Aufbewahrung ja, um Speicher zu sparen.
Quellen und weiterführende Literatur
- Docker Logging: https://docs.docker.com/config/containers/logging/configure/
- JSON File Log Driver: https://docs.docker.com/config/containers/logging/json-file/
- Local Log Driver: https://docs.docker.com/config/containers/logging/local/
- Loki: https://grafana.com/loki/
Zusammenfassung: Docker-Log-Rotation einrichten
Docker-Log-Rotation verhindert, dass Container-Logs ungebremst wachsen und die Festplatte füllen. Der json-file oder local Driver mit max-size und max-file ist für lokale Setups die einfachste Lösung. Für zentrale Verwaltung bieten sich externe Log-Dienste an. Wer Logs begrenzt, regelmässig prüft und die Aufbewahrungsdauer festlegt, behält den Speicherbedarf im Griff und kann bei Problemen trotzdem auf relevante Logeinträge zugreifen.


