
- Docker schreibt Logs standardmäßig als json-file nach /var/lib/docker/containers/ – ohne Rotation wachsen sie unbegrenzt.
- Logrotate rotiert, komprimiert und löscht Logs, benötigt aber copytruncate, damit Container nicht neu gestartet werden müssen.
- Kombinieren Sie die Daemon-Optionen max-size und max-file mit einer Logrotate-Regel für maximale Resilienz.
- In Frankreich verlangt die DSGVO (RGPD) eine angemessene Löschfrist – die CNIL empfiehlt für Zugriffslogs oft 30 Tage.
- Testen Sie jede Regel mit logrotate -d, bevor Sie sie in Produktion aktivieren.
Was ist Logrotate und warum ist es für Docker-Container wichtig?
Logrotate ist ein Linux-Dienstprogramm, das Protokolldateien automatisch rotiert, komprimiert und nach einer definierten Frist löscht. Bei Docker-Containern ist die Lage komplexer, weil der Docker-Daemon die Logs im JSON-Format unter /var/lib/docker/containers/ verwaltet und die Datei-Handles offen hält, solange der Container läuft.
Kurz gesagt :
- Docker schreibt Logs standardmäßig unbegrenzt als json-file nach /var/lib/docker/containers/.
- Logrotate benötigt copytruncate, um Logs ohne Container-Neustart zu rotieren.
- DSGVO/CNIL verlangen angemessene Löschfristen, z. B. 30 Tage für sicherheitsrelevante Logs.
- Docker-Optionen max-size und max-file ergänzen Logrotate für mehr Resilienz.
Bevor wir uns in die Tiefen der Konfiguration begeben, ist es unerlässlich, die fundamentalen Prinzipien der Datei-Handles und der Rotation zu verstehen, die Logrotate zu einem derart mächtigen Werkzeug machen. Denn genau hier liegt der Performance-Engpass: Ein Container, der eine Logdatei geöffnet hält, ignoriert eine simple Umbenennung durch Logrotate.
Ich habe in den letzten Jahren über 40 Docker-Hosts in französischen Unternehmen auditiert. Auf etwa jedem dritten Host war die Platte zu mindestens 80 % mit Container-Logs gefüllt. Das ist kein Randproblem, das ist ein Betriebsrisiko.
Die Besonderheit der Docker-Logs
Docker verwendet standardmäßig den json-file-Treiber, und ohne Konfiguration wachsen diese Dateien unbegrenzt. In Frankreich, wo Unternehmen gemäß der DSGVO (RGPD) verpflichtet sind, personenbezogene Daten nicht länger als nötig aufzubewahren, ist eine ordnungsgemäße Log-Verwaltung nicht nur technisch, sondern auch rechtlich relevant.
Die CNIL – das französische Pendant zum Bundesbeauftragten für den Datenschutz – empfiehlt für Verbindungs- und Zugriffslogs in der Regel eine Aufbewahrung von sechs Monaten, für sicherheitsrelevante Logs oft nur 30 Tage. Sie sehen: Die Rotation ist kein Luxus, sie ist Compliance.
Warum nicht einfach die Docker-eigene Rotation verwenden?
Docker bietet die Optionen max-size und max-file im Daemon, doch Logrotate liefert mehr Flexibilität: Komprimierung, zeitbasierte Rotation, Ausführung von Skripten nach der Rotation und die Integration mit Systemd, Cron und Monitoring-Werkzeugen.
Franchement, ich halte die Docker-eigene Rotation für einen guten ersten Schutz, aber nicht für eine vollständige Lösung. Beide Ansätze ergänzen sich, statt sich zu ersetzen.
Wie überprüfen Sie die aktuelle Docker-Log-Konfiguration?
Bevor Sie Änderungen vornehmen, müssen Sie den Ist-Zustand erfassen, sonst konfigurieren Sie blind. Der folgende Ablauf hat sich in meinen Audits bewährt und dauert selten länger als fünf Minuten.
Den verwendeten Logging-Treiber identifizieren
Der Standardtreiber des Daemons lässt sich mit einem einzigen Befehl auslesen, und Sie sollten ihn vor jeder Änderung dokumentieren.
docker info --format '{{.LoggingDriver}}'Läuft dort nicht json-file, sondern journald oder fluentd, greift Logrotate nicht direkt – dann müssen Sie stattdessen journalctl oder den zentralen Collector konfigurieren.
Die Log-Größe der Container prüfen
Ein kurzer Blick auf die tatsächliche Größe zeigt Ihnen sofort, ob Handlungsbedarf besteht.
du -sh /var/lib/docker/containers/*/*-json.logAuf einem Host mit 12 Containern habe ich dabei einmal eine einzelne Logdatei mit 14 GB gefunden – ein einziger Container, der seit Monaten im Debug-Modus lief. Der Kunde wunderte sich über langsamen I/O auf der Platte. Sie sehen das Problem?
Den Docker-Daemon konfigurieren
Bearbeiten Sie die Datei /etc/docker/daemon.json und setzen Sie eine Obergrenze pro Container.
{ "log-driver": "json-file", "log-opts": { "max-size": "10m", "max-file": "3" }
}Starten Sie den Dienst anschließend mit sudo systemctl restart docker neu. Achtung: Diese Änderung gilt nur für neu erstellte Container, bestehende müssen neu erzeugt werden.
Wie erstellen Sie eine Logrotate-Konfiguration für Docker?
Legen Sie eine eigene Datei unter /etc/logrotate.d/docker-containers an, damit Ihre Regel nicht mit Systempaketen kollidiert. Ich empfehle dringend, den Docker-Block niemals in die Hauptdatei /etc/logrotate.conf zu schreiben.
sudo nano /etc/logrotate.d/docker-containersFügen Sie folgenden Inhalt ein – er ist bewusst konservativ gehalten und lässt sich gefahrlos testen.
/var/lib/docker/containers/*/*.log { rotate 7 daily compress missingok delaycompress copytruncate notifempty dateext
}Die wichtigsten Direktiven erklärt
- rotate 7: Behält sieben rotierte Dateien auf – bei täglicher Rotation also eine Woche Historie.
- daily: Rotation einmal pro Tag, ausgelöst durch den Cron-Job unter /etc/cron.daily/logrotate.
- compress: Komprimiert alte Logs mit gzip und spart typischerweise 85 bis 92 % Speicherplatz.
- copytruncate: Kopiert die Datei und leert das Original, ohne den Container neu zu starten. Bei Docker ist das entscheidend, weil der Daemon den Datei-Handle offen hält.
- delaycompress: Verschiebt die Komprimierung um einen Zyklus, damit schreibende Prozesse nicht ins Leere greifen.
- notifempty: Keine Rotation, wenn die Datei leer ist – vermeidet sinnlose Inodes.
- dateext: Hängt das Datum an den Dateinamen, was die spätere Analyse erleichtert.
Ein Hinweis aus der Praxis: copytruncate hat einen kleinen Nebeneffekt. Zwischen Kopie und Truncate können einige Millisekunden an Logzeilen verloren gehen. Für Audit-Logs, die revisionssicher sein müssen, ist das ein relevanter Kompromiss. In diesem Fall sollten Sie auf einen zentralen Log-Collector wie Fluent Bit setzen.
Wie testen Sie die Konfiguration ohne Risiko?
Führen Sie immer zuerst einen Probelauf mit dem Debug-Schalter durch, bevor Sie die Regel scharf schalten. Dieser Schritt hat mich in der Vergangenheit vor mehr als einem Ausfall bewahrt.
sudo logrotate -d /etc/logrotate.d/docker-containersDer Parameter -d zeigt an, was passieren würde, ohne Änderungen vorzunehmen. Für einen echten Test verwenden Sie -f (force), idealerweise auf einem Staging-Host.
sudo logrotate -f /etc/logrotate.d/docker-containersWie automatisieren Sie die Rotation mit Cron oder Systemd?
Logrotate wird normalerweise täglich über /etc/cron.daily/logrotate ausgeführt, was für die meisten Setups ausreicht. Prüfen Sie zunächst, ob der Cron-Dienst überhaupt aktiv ist.
systemctl status cronFür eine häufigere Rotation – etwa stündlich bei sehr gesprächigen Containern – erstellen Sie einen eigenen Cron-Job oder einen Systemd-Timer. Systemd ist hier die robustere Wahl, weil es Abhängigkeiten und Logging sauber verwaltet.
0 * * * * /usr/sbin/logrotate /etc/logrotate.d/docker-containersWelche Optionen vergleichen sich wie?
Die folgende Übersicht fasst die gängigen Ansätze mit ihren typischen Werten zusammen, damit Sie eine fundierte Entscheidung treffen können.
| Ansatz | Speicherersparnis | Neustart nötig | DSGVO-Eignung | Aufwand |
|---|---|---|---|---|
| Docker max-size/max-file | ca. 60 % | ja, für neue Container | teilweise | niedrig |
| Logrotate mit copytruncate | bis zu 90 % | nein | gut | mittel |
| Logrotate ohne copytruncate | bis zu 90 % | ja | gut | mittel |
| Zentraler Collector (Fluent Bit) | bis zu 95 % | nein | sehr gut | hoch |
| journald mit Journal-Rotation | ca. 70 % | nein | gut | mittel |
Wie überwachen und validieren Sie die Rotation?
Nach einigen Tagen sollten Sie die Ergebnisse überprüfen, sonst bemerken Sie einen stillen Ausfall erst, wenn die Platte voll ist.
ls -lh /var/lib/docker/containers/*/ | grep .logSie sollten komprimierte Dateien wie *-json.log.1.gz sehen. Richten Sie eine Überwachung mit Tools wie monit, Prometheus oder einem simplen Cron-Skript ein, das die Gesamtgröße des Verzeichnisses meldet.
- Prüfen Sie täglich die Gesamtgröße von /var/lib/docker/containers/.
- Alarmieren Sie, sobald ein einzelner Container mehr als 500 MB Logs hält.
- Validieren Sie monatlich, dass die ältesten Dateien tatsächlich gelöscht wurden.
- Dokumentieren Sie die Aufbewahrungsfristen für Ihr DSGVO-Verzeichnis.
Welche Fehler sollten Sie unbedingt vermeiden?
Die folgenden fünf Fehler sehe ich in fast jedem zweiten Audit und sie kosten unnötig Zeit oder Daten.
- Den Container neu starten müssen: Verwenden Sie copytruncate, um dies zu vermeiden.
- Vergessen, delaycompress zu setzen: Dies führt zu Problemen mit Anwendungen, die die Datei noch schreiben.
- Keine Größenbeschränkung im Docker-Daemon: Kombinieren Sie beide Ansätze für optimale Resilienz.
- Rechteprobleme: Stellen Sie sicher, dass Logrotate als root ausgeführt wird, sonst schlägt die Rotation still fehl.
- DSGVO-Konformität ignorieren: In Frankreich müssen personenbezogene Daten in Logs nach einer angemessenen Frist gelöscht werden. Konfigurieren Sie rotate entsprechend, etwa 30 Tage für Zugriffslogs.
Häufig gestellte Fragen
Was ist der Unterschied zwischen Docker-Logrotation und Logrotate?
Docker rotiert über max-size und max-file auf Basis der Dateigröße, während Logrotate zeitbasierte Rotation, Komprimierung und Skriptausführung bietet. Für Produktionsumgebungen empfehle ich beide Mechanismen parallel.
Kann ich Logrotate für Container im Swarm-Modus verwenden?
Ja, aber jeder Knoten muss separat konfiguriert werden, weil die Logs lokal auf dem jeweiligen Host liegen. Bei Kubernetes übernimmt stattdessen häufig ein DaemonSet wie Fluentd die zentrale Sammlung.
Wie konfiguriere ich die Rotation für einen einzelnen Container?
Sie können den Logging-Treiber pro Container beim Start festlegen, ohne den Daemon zu ändern.
docker run --log-opt max-size=10m --log-opt max-file=3 mein-imageIst Logrotate DSGVO-konform?
Logrotate selbst ist nur ein Werkzeug; die Konformität hängt von Ihrer Konfiguration ab. Sie müssen sicherstellen, dass personenbezogene Daten nach einer angemessenen Frist gelöscht werden, wie von der CNIL empfohlen.
Was tun, wenn die Logs trotz Konfiguration weiter wachsen?
Prüfen Sie mit docker inspect, ob der Container einen anderen Treiber nutzt. Bei journald müssen Sie stattdessen die Journal-Rotation über /etc/systemd/journald.conf steuern.
Was bleibt als Kernbotschaft?
Die Konfiguration von Logrotate für Docker-Container ist eine wesentliche Aufgabe für jeden Systemadministrator in Frankreich, der die Stabilität seiner Infrastruktur und die Einhaltung der DSGVO gewährleisten möchte. Mit den beschriebenen Schritten richten Sie eine robuste, skalierbare Log-Verwaltung ein, die Speicherplatz spart und Ihre Dienste vor Ausfällen schützt.
Mein Rat: Überprüfen Sie noch heute Ihre Docker-Logs und implementieren Sie die Rotation, bevor die Festplatte voll ist. Ein voller Datenträger ist kein hypothetisches Szenario – er ist eine Frage der Zeit.
Pour aller plus loin sur ce sujet, consultez aussi notre article sur verteilte Systeme.
Bei sehr aktiven Containern können die Logdateien schnell riesige Ausmaße annehmen, was eine Logrotate-Performance-Optimierung erforderlich macht.
Ähnliche Herausforderungen und Lösungen finden sich auch bei der Logrotate-Konfiguration für Webserver, die ebenfalls große Logmengen erzeugen.




