Wie kann ich die Protokollausgabe mit Docker-Compose anzeigen?


90

Wenn ich benutze, docker-compose upkann ich Protokolle für alle Container in meiner docker-compose.ymlDatei sehen.

Wenn ich jedoch benutze, sehe docker-compose run appich nur die Konsolenausgabe für, appaber keinen der Dienste, die appdavon abhängen. Wie kann die Protokollausgabe für die anderen Dienste angezeigt werden?


3
Sie können verwendendocker-compose logs -f service_name
Xiongbing Jin

Beachten Sie auch, dass bei docker-compose runjeder Ausführung ein neuer Container erstellt wird.
Jazgot

Im Laufe docker-compose runin circleci nur meine Tests so seine Ordnung zu laufen , wenn es einen neuen Container erstellt. Das Hauptproblem besteht darin, dass keine Protokollausgabe von den abhängigen Diensten angezeigt wird.
Sthomps

Antworten:


128

Update 1. Juli 2019

docker-compose logs <name-of-service>

Aus der Dokumentation :

Verwendung: Protokolle [Optionen] [SERVICE ...]

Optionen:

--no-color Erzeugt eine monochrome Ausgabe.

-f, --follow Folgen Sie der Protokollausgabe.

-t, --timestamps Zeigt Zeitstempel an.

--tail = "all" Anzahl der Zeilen, die am Ende der Protokolle für jeden Container angezeigt werden sollen.

Siehe Docker-Protokolle

Sie können Docker Compose im getrennten Modus starten und sich später an die Protokolle aller Container anhängen . Wenn Sie mit dem Ansehen von Protokollen fertig sind, können Sie sich von der Protokollausgabe trennen, ohne Ihre Dienste herunterzufahren.

  1. Verwenden Sie docker-compose up -ddiese Option , um alle Dienste im getrennten Modus zu starten ( -d) ( im getrennten Modus werden keine Protokolle angezeigt).
  2. Verwenden Sie befestigen Sie sich auf die Protokolle von allen laufenden Dienste , während Mittel Sie folgen die Protokollausgabe und die Option gibt Ihnen Zeitstempel (siehe Docker Referenz )docker-compose logs -f -t-f-t
  3. Verwenden Sie Ctrl + zoder Ctrl + c, um sich von der Protokollausgabe zu trennen, ohne Ihre laufenden Container herunterzufahren

Wenn Sie an Protokollen eines einzelnen Containers interessiert sind, können Sie dockerstattdessen das Schlüsselwort verwenden:

  1. Verwenden docker logs -t -f <name-of-service>

Speichern Sie die Ausgabe

Um die Ausgabe in einer Datei zu speichern, fügen Sie Ihrem Protokollbefehl Folgendes hinzu:

  1. docker-compose logs -f -t >> myDockerCompose.log

7
Ich weiß nicht, warum dies die akzeptierte Antwort ist. Die Frage betraf den Docker-Compose-Lauf und häufig wird dieser mit -rm ausgeführt, sodass keine Protokolle vorhanden sind. Ich möchte die Ausgabe des Shell-Skripts sehen, während ich es ausführe.
James O'Brien

2
Dies sind zwar nützliche Informationen, aber KEINE Antwort auf die Frage. Wie @ JamesO'Brien sagte, handelt es sich bei der Frage um docker-compose runjene Dienste, die eindeutige Namen von den indocker.compose.yml
TetraDev

18

Wenn Sie Ausgabeprotokolle aller Dienste in Ihrem Terminal anzeigen möchten .

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

Beispiel: Angenommen, Sie möchten die Ausgabe der letzten 5 Zeilen aller Dienste protokollieren

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

Wenn Sie die Ausgabe bestimmter Dienste protokollieren möchten, können Sie dies wie folgt tun:

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

Verwendung:

Z.B. Angenommen, Sie haben API- und Portaldienste, dann können Sie Folgendes tun:

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

Wobei 5 die letzten 5 Zeilen aus beiden Protokollen darstellt.

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


4
  1. Verwenden Sie den Befehl, um Container im getrennten Modus zu starten: docker-compose up -d
  2. Um die Container anzuzeigen, verwenden Sie: docker ps
  3. So zeigen Sie Protokolle für einen Container an: docker logs <containerid>

0

Leider müssen wir docker-compose logsgetrennt von laufen docker-compose run. Damit dies zuverlässig funktioniert, müssen wir den docker-compose runExit-Status unterdrücken, dann das Protokoll umleiten und mit dem richtigen Status beenden.

#!/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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.