GNU/Linux >> LINUX-Kenntnisse >  >> Panels >> Docker

Wo speichert Docker Protokolldateien?

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

Wo werden Protokolle gespeichert?

Die einfache Antwort ist, dass Docker Containerprotokolle an seinem Hauptspeicherort /var/lib/docker/ speichert . Jeder Container hat ein spezifisches Protokoll für seine ID (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

Das ist wo Sie werden gespeichert, aber da sie im JSON-Format vorliegen, sind sie nicht leicht lesbar, und es ist ärgerlich, die vollständige Container-ID verwenden zu müssen. Docker bietet einen eingebauten Befehl, um sie anzuzeigen:

docker logs -f e4bd48ef3103

Hier das -f flag hält die Eingabeaufforderung geöffnet und „folgt“ allen neuen Einträgen in der Datei. Sie können auch --tail verwenden der Datei oder verwenden Sie --timestamps um die Protokollzeit anzuzeigen, oder verwenden Sie --until und --since um nach Zeit zu filtern.

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

docker-compose logs

Eine Sache, die Sie jedoch bemerken werden, ist, dass dies STDOUT und STDERR ist, was für viele Dinge nützlich ist, Ihnen aber nur die Konsolenausgabe des Einstiegspunkts zeigt, der durch „CMD“ in der Docker-Datei angegeben ist. Viele Apps haben ihre eigenen dedizierten Protokollierungssysteme, die häufig in Dateien wie /var/log/nginx/access.log protokollieren . Der Zugriff auf Protokolle wie dieses ist weiterhin von der Hostseite über Docker möglich.

Anzeigen von Protokollen von Apps in Containern

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

RUN ln -sf /dev/stdout /var/log/nginx/access.log 
&& 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 stellt das exec -it bereit Befehl, damit Sie jeden Befehl in jedem laufenden Docker-Prozess ausführen können. Damit können Sie eine Protokolldatei in einem Docker-Container tailen:

docker exec -it e4bd48ef3103 tail -f log.txt

Da Sie damit jeden Befehl ausführen können, können Sie journalctl verwenden oder andere Debugging-Strategien, die Sie möchten, 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 spielt, ist die Verwendung eines Docker-Volume-Mounts. Sie können ein Verzeichnis wie /var/log/nginx binden auf ein Volume, 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 Prozess automatisiert werden:

version: "3.0"
services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
    volumes:
      - nginx-logs:/var/log/nginx/
volumes:
  nginx-logs:

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

Anzeigen von Docker-Daemon-Protokollen

Wenn Sie stattdessen Protokolle anzeigen möchten, die für den gesamten Docker-Dienst auf Ihrem Server und nicht für eine bestimmte containerisierte Anwendung spezifisch sind, sollten Sie das journalctl anzeigen Protokolle:

sudo journalctl -fu docker.service

Hier wird es auf den meisten Systemen gespeichert, aber auf einigen 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:AppDataRoamingDockerlogvmdockerd.log

Docker
  1. Befehl zum Bereinigen alter Protokolldateien?

  2. Wie spielt man .swf-Dateien ab?

  3. Linux-Logdateien

  4. Wo speichert Linux Mint die Dateien für Standard-Desktop-Hintergründe?

  5. Wo finde ich SSH-Anmeldeprotokolldateien auf Centos?

Wo werden Docker-Images und -Container auf dem Host gespeichert?

So zentralisieren Sie die Protokollverwaltung mit Graylog mit Docker

So kopieren Sie Dateien mit Docker cp in Ihren Docker-Container

Halten Sie Ihre Docker-Images mit Docker Image Prune überschaubar

So kopieren Sie Dateien zwischen Host und Docker-Container

So greifen Sie auf Dateien außerhalb eines Docker-Containers zu