Detaillierte Erklärung, wo Docker Protokolldateien speichert

Detaillierte Erklärung, wo Docker Protokolldateien speichert

Das Debuggen der meisten Linux-Programme umfasst normalerweise die Untersuchung von Protokolldateien, was ein komplexer Prozess sein kann. Wenn Sie jedoch eine Containerumgebung unter Docker ausführen, müssen Sie zum Debuggen Ihrer Anwendung in der Produktion speziellere Tools verwenden.

Wo werden die Protokolle gespeichert?

Die einfache Antwort ist, dass Docker Containerprotokolle an seinem primären Speicherort /var/lib/docker/ speichert. Jeder Container hat ein Protokoll, das für seine ID spezifisch ist (die vollständige ID, nicht die verkürzte, die normalerweise angezeigt wird), und Sie können wie folgt darauf zugreifen:

/var/lib/docker/containers/ID/ID-json.log

Dort werden sie gespeichert, da sie jedoch im JSON-Format vorliegen, sind sie nicht leicht zu lesen und die Verwendung der vollständigen Container-ID ist lästig. Docker bietet einen integrierten Befehl zum Anzeigen dieser Daten:

Docker-Protokolle -f e4bd48ef3103

Hier sorgt das Flag -f dafür, dass die Eingabeaufforderung geöffnet bleibt und auf neue Einträge in der Datei „achtet“. Sie können auch --tail verwenden, um das Dateitail anzufügen, oder --timestamps, um Protokollzeiten anzuzeigen, oder --until und --since, um nach Zeit zu filtern.

Wenn Sie Docker Compose verwenden, können Sie alle Protokolle einfach mit dem darin enthaltenen Protokollbefehl anzeigen:

Docker-Compose-Protokolle

Ihnen wird jedoch auffallen, dass die für viele Dinge nützlichen STDOUT und STDERR nur die Konsolenausgabe für den in der Docker-Datei durch „CMD“ angegebenen Einstiegspunkt anzeigen. Viele Anwendungen verfügen über eigene dedizierte Protokollierungssysteme, die normalerweise in /var/log/nginx/access.log protokollieren. Auf solche Protokolle kann weiterhin von der Hostseite über Docker zugegriffen werden.

Anzeigen von Protokollen einer Anwendung innerhalb eines Containers

Je nach Behälter kann dies auch nicht erforderlich sein. Beispielsweise ist der Standard-NGINX-Container so eingerichtet, dass er seine Docker-Protokolle an STDOUT sendet, um die Protokollprüfung zu vereinfachen. Dies geschieht mithilfe eines /dev/stdout-Symlinks zur Protokolldatei. Sie könnten etwas Ähnliches für Ihren Container einrichten.

RUN ln -sf /dev/stdout /var/log/nginx/access.log 
&& ln -sf /dev/stderr /var/log/nginx/error.log

Wenn Sie jedoch eine bestimmte Datei im Container anzeigen möchten, können Sie dies tun. Docker bietet den Befehl exec -it, mit dem Sie jeden beliebigen Befehl innerhalb eines laufenden Docker-Prozesses ausführen können. Damit können Sie Protokolldateien in einem Docker-Container segmentieren:

docker exec -it e4bd48ef3103 tail -f log.txt

Da Sie damit jeden beliebigen Befehl ausführen können, können Sie journalctl oder jede andere gewünschte Debugging-Strategie verwenden, solange Sie es als docker exec -it ./bin/bash starten. Sie können es sogar ausführen, wenn Sie direkt einsteigen und herumstöbern möchten.

Eine dauerhaftere Lösung, die besser für Hosting-Dienste geeignet ist, ist die Verwendung von Docker-Volume-Mounts. Sie können ein Verzeichnis wie /var/log/nginx an ein für den Host sichtbares Volume anbinden. Erstellen Sie zunächst ein neues Volume:

Docker-Volume erstellt Nginx-Protokolle

Und führen Sie den Container --mount mit dem folgenden Befehl aus:

docker run -d \
--name devtest \
--mount Quelle=nginx-logs,Ziel=/var/log/nginx \
nginx:neueste

Wenn Sie Docker Compose verwenden, kann der Prozess automatisiert werden:

Version: "3.0"
Leistungen:
  Webseite:
    Bild: nginx:latest
    Häfen:
      - "80:80"
    Bände:
      – nginx-logs:/var/log/nginx/
Bände:
  nginx-Protokolle:

Auf diese Weise kann jeder Protokollaggregationsdienst auf dem Host die Protokolldateien direkt aufnehmen.

Docker-Daemon-Protokolle anzeigen

Wenn Sie bestimmte Protokolle für den gesamten Docker-Dienst auf Ihrem Server und nicht für eine bestimmte containerisierte Anwendung anzeigen möchten, müssen Sie die Journalctl-Protokolle anzeigen:

sudo journalctl -fu docker.service

Auf den meisten Systemen ist der Speicherort hier, auf manchen Systemen jedoch auch anders:

  • Amazon Linux: /var/log/docker
  • CentOS/RHEL: /var/log/messages | grep docker
  • Apfel: ~/Library/Containers/com.docker.docker/Data/log/vm/dockerd.log
  • Windows: AppData\Roaming\Docker\log\vm\dockerd.log

Dies ist das Ende dieses Artikels darüber, wo Docker Protokolldateien speichert. Weitere Informationen zum Speichern von Protokolldateien durch Docker finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird!

Das könnte Sie auch interessieren:
  • So zeigen Sie Docker-Containerprotokolle an und bereinigen sie (getestet und effektiv)
  • So zeigen Sie Anwendungsprotokolle von Docker-Containern an
  • Lösung für das Problem mit verstümmelten chinesischen Schriftzeichen in Docker-Container-Protokollen
  • Detaillierte Erläuterung der Protokollverarbeitung von Docker-Containern
  • So gehen Sie mit zu vielen Docker-Protokollen um, die dazu führen, dass die Festplatte voll wird
  • Detaillierte Erläuterung der Idee des Rollens von Nginx-Protokollen in Docker
  • Beispiel für die Verwendung von Docker zum Erstellen eines ELK-Protokollsystems
  • Lösen Sie das Problem der Docker-Protokollmontage
  • Docker-Container-Protokollanalyse

<<:  So fügen Sie eine Popup-Aktionsschaltfläche unten für „Select“ und „Cascader“ von Element-UI hinzu

>>:  Front-End-KI-Schnitttipps (Erfahrung)

Artikel empfehlen

Alibaba Cloud beantragt ein kostenloses SSL-Zertifikat (https) von Cloud Shield

Da das Projekt den https-Dienst nutzen muss, habe...

HTML+CSS zur Realisierung einer einfachen Navigationsleistenfunktion

Ohne weitere Umschweife komme ich gleich zum Code...

Vue implementiert Fuzzy-Abfrage-MySQL-Datenbankdaten

Inhaltsverzeichnis 1. Nachfrage 2. Umsetzung 3. E...

So legen Sie die Anzahl der MySQL-Verbindungen fest und ermitteln sie

Holen Sie sich die Anzahl der Verbindungen --- Ho...

Zusammenfassung der MySQL-Funktionsmethode LOAD_FILE()

In MySQL liest die Funktion LOAD_FILE() eine Date...

Dynamischer Sternenhimmel Hintergrund umgesetzt mit CSS3

Ergebnis:Implementierungscode html <link href=...

Grafische Schritte zur Zabbix-Überwachung des VMware Exsi-Hosts

1. Rufen Sie das Virtualisierungscenter auf, meld...

Centos6.9-Installation Mysql5.7.18 Schrittaufzeichnung

Installationsreihenfolge rpm -ivh mysql-community...

Welche Bilddateiformate gibt es und wie wählt man sie aus?

1. Welche drei Formate? Dies sind: gif, jpg und pn...