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źć?

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)


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

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).


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


2

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


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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.