Wo speichert Docker Protokolldateien?

0
218

Das Debugging der meisten Linux-Programme beinhaltet normalerweise das Überprüfen von Protokolldateien, was komplex sein kann Prozess. Bei der Ausführung in einer containerisierten Umgebung unter Docker müssen Sie jedoch spezifischere Tools zum Debuggen von Apps in der Produktion verwenden.

Wo werden Protokolle gespeichert ?

Die einfache Antwort ist, dass Docker Container-Logs an seinem Hauptspeicherort /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, aber da sie im JSON-Format vorliegen, sind sie nicht leicht lesbar und müssen die vollständige Container-ID verwenden nervig. Docker bietet einen eingebauten Befehl zum Anzeigen:

docker logs -f e4bd48ef3103

Hier hält das Flag -f die Eingabeaufforderung offen und “folgen” alle neuen Einträge in der Datei. Sie können die Datei auch –tailen oder –timestamps verwenden, um die Protokollzeit anzuzeigen, oder –until und -since verwenden, um nach der Zeit zu filtern.

Wenn Sie Docker verwenden Compose, können Sie den log-Befehl verwenden, um alle Protokolle einfach anzuzeigen:

docker-compose logs Werbung

Sie werden jedoch feststellen, dass dies STDOUT und STDERR sind, die für viele Dinge nützlich sind, Ihnen jedoch nur die Konsolenausgabe des durch “CMD” angegebenen Einstiegspunkts anzeigen. in der Docker-Datei. Viele Apps haben ihre eigenen dedizierten Logging-Systeme, die oft in Dateien wie /var/log/nginx/access.log protokollieren. Der Zugriff auf solche Logs ist weiterhin von der Hostseite aus über Docker möglich.

Logs von Apps in Containern anzeigen

Je nach Container ist dies möglicherweise nicht erforderlich. Der standardmäßige NGINX-Container ist beispielsweise so eingerichtet, dass er seine Docker-Protokolle an STDOUT sendet, um die Protokollprüfung zu vereinfachen. Dies geschieht mit einem Symlink von /dev/stdout zur Protokolldatei, und Sie können etwas Ähnliches für Ihre Container einrichten.

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

Wenn Sie jedoch bestimmte Dateien in einem Container auschecken möchten, können Sie dies tun. Docker bietet den Befehl exec -it, damit Sie jeden Befehl in jedem laufenden Docker-Prozess ausführen können. Damit können Sie eine Protokolldatei in einem Docker-Container erstellen:

docker exec -it e4bd48ef3103 tail -f log.txt

Da Sie auf diese Weise jeden Befehl ausführen können, können Sie journalctl oder jede andere gewünschte Debugging-Strategie verwenden, solange Sie docker exec -it voranstellen. Sie können sogar /bin/bash ausführen, wenn Sie einsteigen und herumstöbern möchten.

Eine dauerhaftere Lösung, die besser mit Hostdiensten funktioniert, ist die Verwendung eines Docker-Volume-Mounts. Sie können ein Verzeichnis wie /var/log/nginx an ein Volume binden, das vom Host aus sichtbar ist. Erstellen Sie zuerst ein neues Volume:

docker volume create nginx-logs

Und führen Sie den Container mit –mount aus:

docker run -d –name devtest –mount source=nginx-logs,target=/var/log/nginx nginx:latest

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

Version: “3.0” Dienste: Web: Bild: nginx:neueste Ports: – “80:80” Volumes: – nginx-logs:/var/log/nginx/Volumes: nginx-logs: Werbung

Auf diese Weise können Protokolldateien direkt von allen Protokollaggregationsdiensten auf dem Hostcomputer aufgenommen werden.

Docker-Daemon-Protokolle anzeigen

< p>Wenn Sie stattdessen Protokolle anzeigen möchten, die sich auf den gesamten Docker-Dienst auf Ihrem Server beziehen, und nicht auf eine bestimmte containerisierte App, sollten Sie die Journalctl-Protokolle anzeigen:

sudo journalctl -fu docker.service < p>Hier ist es auf den meisten Systemen gespeichert, aber auf einigen ist es an einer anderen Stelle:

  • Amazon Linux: /var/log/docker
  • CentOS/RHEL: /var/log/messages | grep docker
  • macOS: ~/Library/Containers/com.docker.docker/Data/log/vm/dockerd.log
  • Windows: AppDataRoamingDockerlogvm dockerd.log