Wo ist eine Protokolldatei mit Protokollen aus einem Container?


116

Ich verwende mehrere Container mit docker-compose. Ich kann Anwendungsprotokolle mit Befehl sehen docker-compose logs. Ich möchte jedoch auf die Rohprotokolldatei zugreifen, um sie beispielsweise irgendwohin zu senden. Wo befindet es sich? Ich denke, es ist ein separates Protokoll für jeden Container (innerhalb des Containers?), Aber wo kann ich es finden?

Antworten:


190

Die Protokolle eines Containers finden Sie in:

/var/lib/docker/containers/<container id>/<container id>-json.log

(Wenn Sie das Standardprotokollformat verwenden, das json ist)


3
Es gibt viele Ordner wie 004279dd2985037950beeba7e6fe45c10354476d3b82afb68e72dd612b03a8ff. Woher wissen Sie, in welchem ​​Ordner Sie nach einem bestimmten Container suchen müssen?
Praveen Sripati

3
@PraveenSripati Die Container-ID zum Ausführen von Containern wird in der ersten Spalte angezeigt, wenn Sie dies tundocker ps
CS

1
@PraveenSripati schreiben docker ps, erhalten Sie alle verfügbaren Container zusammen mit ihren IDs. Kopieren Sie die ID Ihres gewünschten Containers und /var/lib/docker/containers/starten Sie sie ls | grep <paste the copied docker ID>. Dann sehen Sie diesen Docker-Container
TheLebDev

cd /var/lib/docker/containers/ -bash: cd: / var / lib / docker / container /: Berechtigung verweigert sudo cd /var/lib/docker/containers/ sudo: cd: Befehl nicht gefunden
canbax

2
@ Chris Ich musste tun docker ps --no-trunc, um die gesamte ID zu sehen
Dan Z

97

Sie können docker inspectjedem Container anzeigen, wo sich seine Protokolle befinden:

docker inspect --format='{{.LogPath}}' $INSTANCE_ID

Und falls Sie herausfinden möchten, wo die Protokolle ihre Gesamtgröße verwalten sollen, oder die Parameter der Protokollierung selbst anpassen möchten, finden Sie Folgendes relevant.

Festlegen des für die Protokolle reservierten Speicherplatzes

Dies stammt aus der Anfrage nach der Möglichkeit, den Protokollverlauf zu löschen (Problem 1083) ):

Docker 1.8 und Docker-Compose 1.4 Es gibt bereits eine Methode zum Begrenzen der Protokollgröße mithilfe des Docker-Compose-Protokolltreibers und der maximalen Größe von Log-Opt:

mycontainer:
  ...
  log_driver: "json-file"
  log_opt:
    # limit logs to 2MB (20 rotations of 100K each)
    max-size: "100k"
    max-file: "20"

In Docker Compose-Dateien der Version '2' hat sich die Syntax etwas geändert:

version: '2'
...
mycontainer:
  ...
  logging:
    #limit logs to 200MB (4rotations of 50M each)
    driver: "json-file"
    options:
      max-size: "50m"
      max-file: "4"

(Beachten Sie, dass in beiden Syntaxen die Zahlen als Zeichenfolgen in Anführungszeichen ausgedrückt werden.)

Mögliches Problem beim docker-compose logsNichtbeenden

  • Problem 1866 : Befehl logswird nicht beendet, wenn der Container bereits gestoppt ist

1
Die Kurzversion: Docker inspect -f '{{.LogPath}}' $ INSTANCE_ID
Bienvenido David

12

Verwenden Sie Folgendes, um zu sehen, wie viel Speicherplatz das Protokoll jedes Containers belegt:

docker ps -qa | xargs docker inspect --format='{{.LogPath}}' | xargs ls -hl

(Möglicherweise benötigen Sie eine sudovorher ls).


Ich bekomme eine Erlaubnis verweigert.
Shakedk

1
Das Hinzufügen von Sudo am Ende half: docker ps -qa | xargs docker inspect --format='{{.LogPath}}' | xargs sudo du -hl
Shakedk

2

Um die Protokolldatei in weniger direkt anzuzeigen, verwende ich:

docker inspect $1 | grep 'LogPath' | sed -n "s/^.*\(\/var.*\)\",$/\1/p" | xargs sudo less

Führen Sie als ./viewLogs.sh CONTAINERNAME aus


2

Unter Windows lautet der Standardspeicherort : C:\ProgramData\Docker\containers\<container-id>-json.log.


Dies ist der Fall, wenn ein lokaler Container für die Entwicklung ausgeführt wird! Dank - es war sehr schwer , diese Informationen zu finden
Percy

1

Ab dem 22.08.2008 finden Sie die Protokolle in:

/data/docker/containers/<container id>/<container id>-json.log

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.