Docker spojrzeć na dziennik opuszczonego kontenera

106

Czy istnieje sposób, w jaki mogę zobaczyć dziennik kontenera, który został zamknięty?

Mogę uzyskać identyfikator kontenera, z którego wyszedł, używając, docker ps -aale chcę wiedzieć, co się stało, gdy był uruchomiony.

Niewiele wie
źródło

Odpowiedzi:

111

Użyj docker logs. Działa również w przypadku zatrzymanych kontenerów i przechwytuje całe strumienie STDOUT i STDERR głównego procesu kontenera:

$ 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
źródło
4
W przypadku stosu dockera, w którym jest on uruchamiany ponownie co kilka sekund: 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"nazwa stosu jest określona na początku polecenia.
x-yuri
19

docker logs --tail=50 <container id> dla ostatnich pięćdziesięciu wierszy - przydatne, gdy kontener działa przez długi czas.

kliew
źródło
1
@Whitefret, zaktualizowałem odpowiedź o Twoją sugestię. Oryginalna odpowiedź spowodowałaby ściągnięcie całego logu i ograniczenie go lokalnie, zajęłoby bardzo dużo czasu z dużym logiem i powolną siecią
Matthew
W menedżerze alertów widzę wiele takich komunikatów, ale nie jestem pewien, czy są one związane z alertem:
Arnav Bose
11

Możesz użyć poniższego polecenia, aby skopiować dzienniki nawet z opuszczonego kontenera:

docker cp container_name :path_of_file_in_container destination_path_locally

Na przykład:

docker cp sravya:/tmp/report /root/mylog
Sravya
źródło
7

Aby bezpośrednio wyświetlić plik dziennika opuszczonego kontenera w less, przewinięty do końca pliku, używam:

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

uruchom jako ./viewLogs.sh CONTAINERNAME

Ta metoda ma tę przewagę nad docker logspodejściami opartymi na tym, że plik jest otwierany bezpośrednio, a nie przesyłany strumieniowo.

sudo jest konieczne, ponieważ ścieżka dziennika / plik zwykle należy do administratora

lodowaty
źródło