Jak wyświetlić dane wyjściowe dziennika przy użyciu uruchamiania docker-compose?

99

Kiedy używam docker-compose up, widzę dzienniki dla wszystkich kontenerów w moim docker-compose.ymlpliku.

Jednak gdy używam, docker-compose run appwidzę tylko dane wyjściowe konsoli, appale żadnej z usług, appod których zależy. Jak można zobaczyć dane wyjściowe dziennika dla innych usług?

sthomps
źródło
4
Możesz użyćdocker-compose logs -f service_name
Xiongbing Jin
Pamiętaj również, że docker-compose runtworzy nowy kontener za każdym razem, gdy go wykonujesz.
jazgot
Im uruchomiony docker-compose runw circleci prostu uruchomić moje testy więc jego porządku, jeśli to tworzy nowy pojemnik. Głównym problemem jest po prostu brak wyświetlania danych wyjściowych dziennika z usług zależnych.
sthomps

Odpowiedzi:

142

Aktualizacja 1 lipca 2019 r

docker-compose logs <name-of-service>

Z dokumentacji :

Użycie: logi [opcje] [USŁUGA ...]

Opcje:

--no-colour Tworzy monochromatyczny wydruk.

-f, --follow Śledź wyjście dziennika.

-t, --timestamps Pokaż znaczniki czasu.

--tail = "all" Liczba wierszy wyświetlanych od końca dzienników dla każdego kontenera.

Zobacz dzienniki Dockera

Możesz uruchomić Docker Compose w trybie odłączonym i dołączyć się do dzienników wszystkich kontenerów później. Jeśli skończysz oglądać dzienniki, możesz odłączyć się od danych wyjściowych dzienników bez wyłączania usług.

  1. Służy docker-compose up -ddo uruchamiania wszystkich usług w trybie odłączonym ( -d) (nie zobaczysz żadnych dzienników w trybie odłączonym)
  2. Służy docker-compose logs -f -tdo dołączania się do dzienników wszystkich uruchomionych usług , podczas gdy -foznacza, że ​​śledzisz dane wyjściowe dziennika, a -topcja zapewnia sygnatury czasowe (zobacz informacje o platformie Docker )
  3. Użyj Ctrl + zlub, Ctrl + caby odłączyć się od danych wyjściowych dziennika bez wyłączania działających kontenerów

Jeśli interesują Cię dzienniki pojedynczego kontenera, możesz dockerzamiast tego użyć słowa kluczowego:

  1. Posługiwać się docker logs -t -f <name-of-service>

Zapisz wynik

Aby zapisać dane wyjściowe do pliku, dodaj następujące polecenie do polecenia logs:

  1. docker-compose logs -f -t >> myDockerCompose.log
Bruno Bieri
źródło
8
Nie wiem, dlaczego jest to akceptowana odpowiedź. Pytanie dotyczyło uruchomienia docker-compose i wielu razy uruchamiało to z -rm, więc nie ma żadnych dzienników. Chciałbym zobaczyć wyjście skryptu powłoki, gdy go uruchamiam.
James O'Brien
2
Chociaż jest to przydatna informacja, NIE jest to odpowiedź na pytanie. Jak powiedział @ JamesO'Brien, pytanie dotyczy docker-compose runtych usług, które mają unikalne nazwy z usług wymienionych wdocker.compose.yml
TetraDev,
23

Jeśli chcesz zobaczyć dzienniki wyjściowe wszystkich usług w twoim terminalu.

docker-compose logs -t -f --tail <no of lines> 

Np .: Powiedzmy, że chcesz zarejestrować ostatnie 5 linii z wszystkich usług

docker-compose logs -t -f --tail 5

Jeśli chcesz rejestrować dane wyjściowe z określonych usług , możesz to zrobić w następujący sposób:

docker-compose logs -t -f --tail <no of lines> <name-of-service1> <name-of-service2> ... <name-of-service N>

Stosowanie:

Na przykład. powiedz, że masz API i usługi portalu, możesz zrobić coś takiego jak poniżej:

docker-compose logs -t -f --tail 5 portal api

Gdzie 5 to ostatnie 5 wierszy z obu dzienników.

Ref: https://docs.docker.com/v17.09/engine/admin/logging/view_container_logs/

Niezwyciężony
źródło
5
  1. użyj polecenia, aby uruchomić kontenery w trybie odłączonym: docker-compose up -d
  2. aby zobaczyć pojemniki użyj: docker ps
  3. aby wyświetlić logi dla kontenera: docker logs <containerid>
akshaya pandey
źródło
1

Niestety musimy działać docker-compose logsoddzielnie od docker-compose run. Aby to działało niezawodnie, musimy zablokować docker-compose runstatus wyjścia, a następnie przekierować dziennik i wyjść z odpowiednim statusem.

#!/bin/bash
set -euo pipefail
docker-compose run app | tee app.log || failed=yes
docker-compose logs --no-color > docker-compose.log
[[ -z "${failed:-}" ]] || exit 1
Nathan
źródło