Gdzie jest plik dziennika z dziennikami z kontenera?

117

Używam kilku kontenerów przy użyciu docker-compose. Widzę dzienniki aplikacji z poleceniem docker-compose logs. Chciałbym jednak uzyskać dostęp do surowego pliku dziennika, aby na przykład gdzieś go wysłać? Gdzie to się znajduje? Wydaje mi się, że to osobny dziennik dla każdego kontenera (wewnątrz kontenera?), Ale gdzie mogę go znaleźć?

user606521
źródło

Odpowiedzi:

191

Logi kontenera można znaleźć w:

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

(jeśli używasz domyślnego formatu dziennika, którym jest json)

Michael
źródło
3
Istnieje wiele folderów, takich jak 004279dd2985037950beeba7e6fe45c10354476d3b82afb68e72dd612b03a8ff. Jak się dowiedzieć, którego folderu szukać w konkretnym kontenerze?
Praveen Sripati
3
@PraveenSripati identyfikator kontenera do uruchamiania kontenerów jest wyświetlany w pierwszej kolumnie, jeśli to zrobiszdocker ps
CS
1
@PraveenSripati napisz docker ps, otrzymasz wszystkie dostępne pojemniki wraz z ich identyfikatorami. Skopiuj identyfikator żądanego kontenera, a następnie /var/lib/docker/containers/uruchom ls | grep <paste the copied docker ID>. Wtedy zobaczysz ten kontener
docker
cd /var/lib/docker/containers/ -bash: cd: / var / lib / docker / packages /: Permission denied sudo cd /var/lib/docker/containers/ sudo: cd: command not found
canbax
2
@Chris musiałem zrobić docker ps --no-trunc, aby zobaczyć cały id
Dan Z
97

Możesz zobaczyć docker inspectkażdy kontener, aby zobaczyć, gdzie są jego dzienniki:

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

A jeśli próbujesz dowiedzieć się, gdzie dzienniki miały zarządzać swoim zbiorczym rozmiarem lub dostosować parametry samego logowania, znajdziesz następujące istotne.

Ustalenie ilości miejsca zarezerwowanego na logi

To pochodzi z prośby o możliwość wyczyszczenia historii logów (wydanie 1083) ):

Docker 1.8 i docker-compose 1.4 już istnieje metoda ograniczania rozmiaru dziennika za pomocą sterownika dziennika docker compose i log-opt max-size:

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

W plikach Docker Compose w wersji '2' składnia nieco się zmieniła:

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

(zwróć uwagę, że w obu składniach liczby są wyrażone jako ciągi znaków w cudzysłowach)

Możliwy problem z docker-compose logsbrakiem zakończenia

  • Problem 1866 : polecenie logsnie kończy działania, jeśli kontener jest już zatrzymany
VonC
źródło
1
Krótka wersja: docker inspect -f '{{.LogPath}}' $ INSTANCE_ID
Bienvenido David
12

Aby zobaczyć, ile miejsca zajmuje dziennik każdego kontenera, użyj tego:

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

(możesz potrzebować sudowcześniej ls).

Ten Brazylijczyk
źródło
Odmówiono mi pozwolenia.
Shakedk
1
Dodanie sudo na końcu pomogło: docker ps -qa | xargs docker inspect --format='{{.LogPath}}' | xargs sudo du -hl
Shakedk
2

Aby bezpośrednio wyświetlić plik dziennika w mniej, używam:

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

uruchom jako ./viewLogs.sh CONTAINERNAME

lodowaty
źródło
2

W systemie Windows, domyślna lokalizacja to: C:\ProgramData\Docker\containers\<container-id>-json.log.

pmohandas
źródło
To jest ten podczas uruchamiania lokalnego kontenera na potrzeby programowania! dzięki - bardzo trudno było znaleźć tę informację
Percy
1

Od 22.08.2018 dzienniki można znaleźć w:

/data/docker/containers/<container id>/<container id>-json.log
lixzhang
źródło
1
docker inspect <containername> | grep log
Wasilij Pascal
źródło