docker logs zeigt nicht die Protokolle, die ständig im Systemspeicher gespeichert werden. Stattdessen werden sie standardmäßig als Datei auf der Festplatte des Hostsystems gespeichert.
Wo und wie werden die Protokolle gespeichert? ⚙️
Docker erfasst sowohl die Standardausgabe (stdout) als auch den Standardfehler (stderr) des Containers und verarbeitet diese über den Logging-Treiber. Wenn keine besonderen Einstellungen vorgenommen werden, verwendet Docker standardmäßig den json-file Logging-Treiber.
-
Speicherort: Die Protokolle des Containers werden als JSON-Datei an einem bestimmten Pfad auf dem Host-System gespeichert. Der Pfad lautet in der Regel wie folgt:
/var/lib/docker/containers/[Container_ID]/[Container_ID]-json.log
-
docker logsBefehl: Dieser Befehl zeigt nicht den Inhalt im Speicher an, sondern liest die zuvor erwähnte JSON-Protokolldatei und zeigt sie im Terminal an.
Führt ein ständiges Speichern der Logs nicht zu einem Mangel an Festplattenspeicher? 🤔
Ja, das ist richtig. Wenn keine Maßnahmen ergriffen werden, kann die Protokolldatei weiterhin wachsen, bis der gesamte Speicherplatz des Hosts beansprucht wird. Um dies zu verhindern, bietet Docker eine Log-Rotation-Option, um die Größe und Anzahl der Protokolldateien zu begrenzen.
Zum Beispiel können Sie beim Ausführen des docker run Befehls die folgenden 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: Begrenzen Sie die maximale Größe einer Protokolldatei auf 10MB. -
--log-opt max-file=3: Begrenzen Sie die maximale Anzahl der Protokolldateien auf 3. Wenn die Anzahl überschritten wird, werden die ältesten Dateien gelöscht.
Durch diese Einstellung verwenden die Protokolle dieses Containers nur bis zu 30MB (10MB * 3) Speicherplatz.
Fazit 📝
-
Die Konsolenprotokolle von Docker-Containern werden nicht im Systemspeicher, sondern als Datei auf der Festplatte des Hosts gespeichert.
-
Der
docker logsBefehl hat die Funktion, diese gespeicherten Dateien zu lesen und anzuzeigen. -
Um zu verhindern, dass Protokolldateien unbegrenzt wachsen, ist es sehr wichtig, die Log-Rotation-Optionen (
max-size,max-file) zu konfigurieren.
Mit Docker Compose können Sie die Protokollierungsoptionen für jeden Dienst ganz einfach in der docker-compose.yml Datei einstellen.
Denken Sie daran, dass die --log-opt Flagge des docker run Befehls im YAML-Format verwendet wird.
Einstellungen in der docker-compose.yml Datei 📝
Hier ist ein Beispiel, wie die Log-Rotation für einen Dienst mit dem Namen my-app angewendet wird.
services:
my-app:
image: your-app-image
# ... andere Einstellungen ...
deploy:
resources:
limits:
memory: 512M
# 👇 Dieser Abschnitt enthält die Protokolleinstellungen.
logging:
driver: "json-file" # Der zu verwendende Logging-Treiber (Standardwert, daher optional)
options:
max-size: "10m" # Maximale Größe pro Datei: 10MB
max-file: "3" # Maximale Anzahl an Dateien: 3
-
logging: Der Schlüssel zum Starten der Protokollierungseinstellungen für den Dienst. -
driver: Gibt den zu verwendenden Logging-Treiber an. Der Standardwert istjson-file. -
options: Hier werden die Optionen konfiguriert, die an den Treiber übergeben werden.-
max-size: Entspricht dem--log-opt max-sizevondocker run. -
max-file: Entspricht dem--log-opt max-filevondocker run.
-
Wenn Sie jetzt docker-compose up verwenden, um diesen Dienst zu starten, werden die Protokolle des my-app Containers automatisch rotiert und verwenden nur bis zu 30MB (10MB * 3) Festplattenspeicher.
Standardeinstellungen für alle Container 🌍
Wenn es mühsam ist, für jeden Container die Optionen einzeln festzulegen, und Sie eine globale Richtlinie auf dem gesamten System anwenden möchten, ist es am besten, die Docker-Daemon-Einstellungsdatei zu bearbeiten.
-
Öffnen oder erstellen Sie die Datei
/etc/docker/daemon.json. (Erstellen Sie sie, wenn sie nicht vorhanden ist.) -
Schreiben Sie den Inhalt wie folgt:
{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
}
}
- Starten Sie den Docker-Daemon neu.
sudo systemctl restart docker
Mit dieser Einstellung folgen alle neuen Container dieser Richtlinie, es sei denn, es werden separate Protokollierungseinstellungen vorgenommen. Natürlich haben spezifische Protokollierungsoptionen, die in der docker-compose.yml Datei oder beim docker run Befehl angegeben werden, Vorrang vor den Daemon-Einstellungen.
Zusammenfassung
-
Individuelle Diensteinstellungen: Die häufigste und bequemste Methode ist die Konfiguration im
loggingAbschnitt derdocker-compose.ymlDatei. -
Globale Standardeinstellungen: Bearbeiten Sie die Datei
/etc/docker/daemon.json, um eine einheitliche Richtlinie auf alle Container des Servers anzuwenden.
Es sind keine Kommentare vorhanden.