Docker sehen sich das Protokoll eines verlassenen Containers an

91

Kann ich auf irgendeine Weise das Protokoll eines Containers sehen, der beendet wurde?

Ich kann die Container-ID des verlassenen Containers mit docker ps -aabrufen, möchte aber wissen, was passiert ist, als er ausgeführt wurde.

Weiß nicht viel
quelle

Antworten:

97

Verwenden Sie docker logs. Es funktioniert auch für gestoppte Container und erfasst die gesamten STDOUT- und STDERR-Streams des Hauptprozesses des Containers:

$ docker run -d --name test debian echo "Hello World"
02a279c37d5533ecde76976d7f9d1ca986b5e3ec03fac31a38e3dbed5ea65def

$ docker ps -a
CONTAINER ID    IMAGE     COMMAND        CREATED             STATUS                     PORTS               NAMES
49daa9d41a24    debian    "echo test"    2 minutes ago       Exited (0) 2 minutes ago                       test

$ docker logs -t test
2016-04-16T15:47:58.988748693Z Hello World
Helmbert
quelle
4
Für einen Docker-Stack, der alle paar Sekunden neu gestartet wird: Der stack=s1 && c=$(task_id=$(docker stack ps "$stack" --filter desired-state=shutdown | tail -n +2 | head -n 1 | awk '{print $1}') && docker inspect --format '{{.Status.ContainerStatus.ContainerID}}' "$task_id") && docker logs "$c"Stack-Name wird am Anfang des Befehls angegeben.
X-Yuri
14

docker logs --tail=50 <container id> für die letzten fünfzig Zeilen - nützlich, wenn Ihr Container schon lange läuft.

kliew
quelle
1
@ Whitefret, ich habe die Antwort mit Ihrem Vorschlag aktualisiert. Die ursprüngliche Antwort würde das gesamte Protokoll nach unten ziehen und lokal verfolgen, hätte mit einem großen Protokoll und einem langsamen Netzwerk sehr lange
Matthew
6

Mit dem folgenden Befehl können Sie Protokolle auch aus einem verlassenen Container kopieren:

docker cp container_name :path_of_file_in_container destination_path_locally

Z.B:

docker cp sravya:/tmp/report /root/mylog
Sravya
quelle
5

Um die Protokolldatei eines verlassenen Containers in weniger direkt am Ende der Datei gescrollt anzuzeigen, verwende ich:

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

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

Diese Methode hat gegenüber docker logsbasierten Ansätzen den Vorteil , dass die Datei direkt geöffnet und nicht gestreamt wird.

sudo ist erforderlich, da sich LogPath / File normalerweise im Root-Besitz befindet

icyerasor
quelle