So zeigen Sie Docker-Containerprotokolle an und bereinigen sie (getestet und effektiv)

So zeigen Sie Docker-Containerprotokolle an und bereinigen sie (getestet und effektiv)

1. Problem

Die Docker-Containerprotokolle führten dazu, dass der Speicherplatz auf der Hostfestplatte voll war. docker logs -f container_name hat viele knisternde Protokolle, die viel Platz beanspruchen. Nicht verwendete Protokolle können bereinigt werden.

2. Lösung

2.1 Docker-Container-Protokolle finden

Unter Linux werden Containerprotokolle im Allgemeinen in /var/lib/docker/containers/container_id/ gespeichert. Dateien mit der Endung json.log (Geschäftsprotokolle) sind sehr groß. Das Skript docker_log_size.sh zum Überprüfen der Größe jeder Protokolldatei lautet wie folgt:

#!/bin/sh

echo "======== Größe der Protokolldatei von Docker-Containern =========" 

Protokolle = $ (find /var/lib/docker/containers/ -name *-json.log) 

für die Anmeldung $logs 
    Tun 
       ls -lh $log  
    Erledigt 

# chmod +x docker_log_size.sh

# ./docker_log_size.sh

2.2 Docker-Container-Protokolle bereinigen (Symptome behandeln)

Wenn der Docker-Container ausgeführt wird, werden Sie nach dem Löschen des Protokolls mit rm -rf feststellen, dass der Speicherplatz über df -h nicht freigegeben wird. Der Grund hierfür liegt darin, dass in Linux- oder Unix-Systemen das Löschen von Dateien über rm -rf oder den Dateimanager dazu führt, dass die Verknüpfung dieser Dateien mit der Verzeichnisstruktur des Dateisystems aufgehoben wird. Wenn die Datei geöffnet ist (von einem Prozess verwendet wird), kann der Prozess die Datei weiterhin lesen und der Speicherplatz wird weiterhin belegt. Die richtige Vorgehensweise ist cat /dev/null > *-json.log. Natürlich können Sie es auch mit rm -rf löschen und Docker neu starten. Als nächstes stellen Sie ein Protokollbereinigungsskript clean_docker_log.sh bereit, der Inhalt ist wie folgt:

#!/bin/sh 

echo "======== Starten Sie die sauberen Docker-Container-Protokolle =========" 

Protokolle = $ (find /var/lib/docker/containers/ -name *-json.log) 

für die Anmeldung $logs 
    Tun 
        echo "Protokolle bereinigen: $log" 
        cat /dev/null > $log 
    Erledigt 

echo "======== Ende der Bereinigung der Docker-Container-Protokolle ========="
# chmod +x clean_docker_log.sh

# ./clean_docker_log.sh

Nach einer solchen Bereinigung wachsen die Containerprotokolle jedoch mit der Zeit wie Unkraut nach.

2.3 Festlegen der Protokollgröße des Docker-Containers (Grundursache)

  • Obergrenze der Protokollgröße für einen Containerdienst festlegen

Bei der obigen Methode wird die Protokolldatei früher oder später größer. Um das Problem grundlegend zu lösen, müssen Sie die Obergrenze der Protokollgröße des Containerdienstes begrenzen. Dies wird erreicht, indem die Option max-size des Containers docker-compose konfiguriert wird.

nginx: 
 Bild: nginx:1.12.1 
 Neustart: immer 
 Protokollierung: 
  Treiber: "JSON-Datei" 
  Optionen: 
   maximale Größe: „5 g“ 

Nach dem Neustart des Nginx-Containers ist die Größe seiner Protokolldatei auf 5 GB begrenzt, sodass Sie sich darüber keine Gedanken mehr machen müssen.

  • Globale Einstellungen

Erstellen Sie eine neue /etc/docker/daemon.json. Wenn sie bereits existiert, müssen Sie keine neue erstellen. Fügen Sie die Parameter log-dirver und log-opts wie unten gezeigt hinzu:

# vim /etc/docker/daemon.json

{
 "Registrierungsspiegel": ["http://f613ce8f.m.daocloud.io"],
 "log-driver": "json-Datei",
 "log-opts": {"max-size": "500 m", "max-file": "3"}
}

max-size=500m bedeutet, dass die Obergrenze einer Containerprotokollgröße 500 MB beträgt.

max-file=3 bedeutet, dass ein Container drei Protokolle hat, nämlich id+.json, id+1.json und id+2.json.

// Starten Sie den Docker-Daemon neu# systemctl daemon-reload

# systemctl Neustart Docker

Hinweis: Die eingestellte Loggröße gilt nur für neu erstellte Container.

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird.

Das könnte Sie auch interessieren:
  • Docker-Reinigungskiller/Docker-Overlay-Datei nimmt zu viel Speicherplatz ein
  • So bereinigen Sie von Docker generierte Junk-Dateien
  • So bereinigen Sie Docker-Ressourcen schnell
  • So analysieren und bereinigen Sie die Festplattenspeichernutzung von Docker
  • Sammlung von Docker-Bereinigungsbefehlen
  • Gängige Methoden und Probleme der Docker-Bereinigung

<<:  Beispiel für die Verwendung von Store in Vue3 zum Aufzeichnen der Bildlaufposition

>>:  MySql verwendet Skip-Name-Resolve, um das Problem langsamer externer Netzwerkverbindungen des Clients zu lösen

Artikel empfehlen

Vue.js-Textfeld mit Dropdown-Komponente

Ein Textfeld mit Dropdown-Liste ermöglicht es Ben...

So implementieren Sie eine Paging-Abfrage in MySQL

SQL-Paging-Abfrage:Hintergrund Im System des Unte...

Einführung in MySQL-Rollenfunktionen

Inhaltsverzeichnis Vorwort: 1. Einführung in die ...

So verwenden Sie JSONP in Vue

Inhaltsverzeichnis 1. Einleitung 2. Installation ...

Webdesign-Erfahrung: Das Navigationssystem schlank machen

<br />Bei Diskussionen mit meinen Freunden h...

So installieren Sie Mysql5.7 in Centos6

Umfeld Centos 6.6 MySQL 5.7 Installieren Falls da...

Beispiele für die Verwendung von HTML-Metadaten

Beispielverwendung Code kopieren Der Code lautet w...

Einführung in HTML_PowerNode Java Academy

Was ist HTML? HTML ist eine Sprache zur Beschreib...

Vue macht Div-Höhe verschiebbar

In diesem Artikel wird der spezifische Code von V...

Einfaches Anwendungsbeispiel für rekursive MySQL 8.0-Abfragen

Vorwort Dieser Artikel verwendet die neuen Funkti...

Einige etwas komplexere Verwendungsbeispielcodes in MySQL

Vorwort Ich glaube, dass die Syntax von MySQL nic...

Detaillierte Erklärung der Bind-Mounts für die Docker-Datenspeicherung

Bevor Sie diesen Artikel lesen, hoffe ich, dass S...

SQL implementiert LeetCode (180. Fortlaufende Zahlen)

[LeetCode] 180. Aufeinanderfolgende Zahlen Schrei...