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

So verwenden Sie den VIM-Editor unter Linux

Als leistungsstarker Editor mit umfangreichen Opt...

So fragen Sie JSON in der Datenbank in MySQL 5.6 und darunter ab

Beim Speichern von Daten in MySQL werden manchmal...

Beispielcode zur Implementierung der Alipay-Sandbox-Zahlung mit Vue+SpringBoot

Laden Sie zunächst eine Reihe von Dingen aus der ...

Entwerfen Sie einen Datensammler mit Vue

Inhaltsverzeichnis Szenario Kernthemen Statusüber...

MySQL-String-Aufteilungsvorgang (String-Abfangen mit Trennzeichen)

String-Extraktion ohne Trennzeichen Fragenanforde...

JS implementiert die Append-Funktion von jQuery

Inhaltsverzeichnis Zeig mir den Code Testen Sie d...

Beispielcode eines CSS-responsiven Layoutsystems

Responsive Layoutsysteme sind in den heute gängig...

Schritte für den Exit-Fehlercode des Docker-Containers

Manchmal werden einige Docker-Container nach eine...

Detaillierte Hinweise zu React für Einsteiger

Inhaltsverzeichnis 1. Grundlegendes Verständnis v...

Detaillierte Erklärung der reinen SQL-Anweisungsmethode basierend auf JPQL

JPQL steht für Java Persistence Query Language. B...

Kommentare auf Webseiten verursachen Textüberlauf im Internet Explorer

Der experimentelle Code lautet wie folgt: </hea...