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?

user606521
quelle

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)

Michael
quelle
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
VonC
quelle
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).

Dieser Brasilianer
quelle
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

icyerasor
quelle
2

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

pmohandas
quelle
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
lixzhang
quelle
1
docker inspect <containername> | grep log
Vasili Pascal
quelle