> **Zusammenfassung in 3 Sätzen** > > * Die Konsolen-Logs von Docker-Containern werden als Dateien auf der **Festplatte des Hosts gespeichert, nicht im System-Arbeitsspeicher**. > * Der Befehl `docker logs` liest diese gespeicherten Dateien und zeigt sie an. > * Um ein unbegrenztes Anwachsen der Logdateien zu verhindern, ist die **Konfiguration der Log-Rotation-Optionen (`max-size`, `max-file`)** äußerst wichtig. ## 1\. Wo und wie werden Logs gespeichert? {#sec-37c2a29cff35} [[Docker]] erfasst sowohl den Standard-Output (stdout) als auch den Standard-Error (stderr) der Container-Streams und verarbeitet sie über einen **Logging Driver**. Wenn keine spezifische Konfiguration vorgenommen wird, verwendet Docker standardmäßig den `json-file` Logging Driver. * **Speicherort**: Die Logs der Container werden als JSON-Dateien in einem spezifischen Pfad auf dem Host-System gespeichert. Typischerweise ist dies der Pfad: * `/var/lib/docker/containers/[CONTAINER_ID]/[CONTAINER_ID]-json.log` * **Der `docker logs` Befehl**: Dieser Befehl zeigt nicht etwa Inhalte aus dem Arbeitsspeicher an, sondern liest die oben genannten JSON-Logdateien und gibt sie im Terminal aus. ![Diagramm zur Speicherung von Docker-Logs](/media/whitedec/blog_img/ff3498a786c645ecb031d714a053d4a4.webp) ## 2\. Führt ein kontinuierliches Anwachsen der Logs nicht zu Festplattenplatzmangel? {#sec-4e6257ec2aba} Ja, genau. Ohne entsprechende Maßnahmen können Logdateien unbegrenzt wachsen und den gesamten Festplattenspeicher des Hosts belegen. Um dies zu verhindern, bietet Docker **Log-Rotation**-Optionen an, die die Größe und Anzahl der Logdateien begrenzen. Zum Beispiel können Sie beim Ausführen des `docker run`-Befehls folgende Optionen hinzufügen: ``` docker run -d \ --log-driver json-file \ --log-opt max-size=10m \ --log-opt max-file=3 \ nginx ``` * `--log-opt max-size=10m`: Begrenzt die maximale Größe einer Logdatei auf **10 MB**. * `--log-opt max-file=3`: Begrenzt die maximale Anzahl der Logdateien auf **3**. Wenn diese Anzahl überschritten wird, wird die älteste Datei gelöscht. Mit dieser Einstellung belegen die Logs des betreffenden Containers maximal 30 MB (10 MB * 3 Dateien) Speicherplatz auf der Festplatte. *** ## 3. `docker-compose.yml`-Datei konfigurieren {#sec-890442ea3ac0} Mit Docker Compose können Sie die Logging-Optionen für jeden Dienst ganz einfach direkt in der `docker-compose.yml`-Datei konfigurieren. Stellen Sie sich vor, die `--log-opt`-Flags des `docker run`-Befehls werden in YAML-Format übertragen. Unten sehen Sie ein Beispiel für die Anwendung der Log-Rotation auf einen Dienst namens `my-app`. ``` services: my-app: image: your-app-image # ... weitere Einstellungen ... deploy: resources: limits: memory: 512M # 👇 Dieser Abschnitt ist für die Log-Konfiguration. logging: driver: "json-file" # Zu verwendender Logging Driver (kann weggelassen werden, da Standardwert) options: max-size: "10m" # Maximale Größe pro Datei: 10 MB max-file: "3" # Maximale Anzahl von Dateien: 3 ``` * **`logging`**: Dies ist der Schlüssel, der die Logging-Konfiguration für den jeweiligen Dienst einleitet. * **`driver`**: Gibt den zu verwendenden Logging Driver an. `json-file` ist der Standardwert. * **`options`**: Hier werden die an den Driver zu übergebenden Optionen festgelegt. * **`max-size`**: Entspricht `--log-opt max-size` von `docker run`. * **`max-file`**: Entspricht `--log-opt max-file` von `docker run`. Wenn Sie diesen Dienst nun mit `docker-compose up` starten, werden die Logs des `my-app`-Containers automatisch rotiert und belegen maximal 30 MB (10 MB * 3 Dateien) Festplattenspeicher. ## 4\. Globale Standardeinstellungen für alle Container {#sec-1a0729e53c34} Wenn Sie es umständlich finden, jedem Container einzeln Optionen zuzuweisen, und stattdessen eine globale Standardrichtlinie für das gesamte System anwenden möchten, ist die Modifikation der **Docker Daemon Konfigurationsdatei** der beste Weg. 1. Öffnen oder erstellen Sie die Datei `/etc/docker/daemon.json`. (Falls die Datei nicht existiert, erstellen Sie sie neu.) 2. Fügen Sie den folgenden Inhalt hinzu: ```json { "log-driver": "json-file", "log-opts": { "max-size": "10m", "max-file": "3" } } ``` 3\. Starten Sie den Docker-Daemon neu\. ```bash sudo systemctl restart docker ``` Mit dieser Konfiguration folgen **alle zukünftig erstellten Container** automatisch dieser Richtlinie, sofern keine separate Logging-Konfiguration vorgenommen wird. Beachten Sie, dass individuelle Einstellungen, die in der `docker-compose.yml`-Datei oder über den `docker run`-Befehl für bestimmte Container festgelegt werden, **Vorrang vor den Daemon-Einstellungen** haben. * **Individuelle Dienstkonfiguration**: Die Einstellung im `logging`-Abschnitt der `docker-compose.yml`-Datei ist am gebräuchlichsten und bequemsten. * **Globale Standardeinstellung**: Um eine einheitliche Richtlinie für alle Container auf dem Server anzuwenden, bearbeiten Sie die Datei `/etc/docker/daemon.json`.