Comment afficher la sortie du journal à l'aide de docker-compose run?

96

Lorsque j'utilise, docker-compose upje peux voir les journaux de tous les conteneurs de mon docker-compose.ymlfichier.

Cependant, lorsque j'utilise, docker-compose run appje ne vois que la sortie de la console, appmais aucun des services dont appdépend. Comment voir la sortie du journal pour les autres services?

échecs
la source
4
Vous pouvez utiliserdocker-compose logs -f service_name
Xiongbing Jin
Notez également que docker-compose runcrée un nouveau conteneur à chaque fois que vous l'exécutez.
jazgot
Je cours docker-compose rundans circleci juste pour exécuter mes tests, donc c'est correct s'il crée un nouveau conteneur. Le problème principal est simplement de ne pas voir la sortie du journal des services dépendants.
sthomps

Réponses:

135

Mise à jour du 1er juillet 2019

docker-compose logs <name-of-service>

De la documentation :

Utilisation: journaux [options] [SERVICE ...]

Options:

--no-color Produit une sortie monochrome.

-f, --follow Suivre la sortie du journal.

-t, --timestamps Afficher les horodatages.

--tail = "all" Nombre de lignes à afficher à partir de la fin des logs pour chaque conteneur.

Voir les journaux de docker

Vous pouvez démarrer la composition de Docker en mode détaché et vous attacher aux journaux de tous les conteneurs ultérieurement. Si vous avez terminé de regarder les journaux, vous pouvez vous détacher de la sortie des journaux sans arrêter vos services.

  1. Utilisez docker-compose up -dpour démarrer tous les services en mode détaché ( -d) (vous ne verrez aucun journal en mode détaché)
  2. Utilisez docker-compose logs -f -tpour vous attacher aux journaux de tous les services en cours d'exécution , alors que cela -fsignifie que vous suivez la sortie du journal et que l' -toption vous donne des horodatages (voir la référence Docker )
  3. Utilisez Ctrl + zou Ctrl + cpour vous détacher de la sortie du journal sans arrêter vos conteneurs en cours d'exécution

Si vous êtes intéressé par les journaux d'un seul conteneur, vous pouvez utiliser le dockermot clé à la place:

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

Sauvegarder la sortie

Pour enregistrer la sortie dans un fichier, ajoutez les éléments suivants à votre commande logs:

  1. docker-compose logs -f -t >> myDockerCompose.log
Bruno Bieri
la source
7
Je ne sais pas pourquoi c'est la réponse acceptée. La question portait sur l'exécution de docker-compose et vous l'exécutez souvent avec -rm, donc il n'y a pas de journaux. Je voudrais voir la sortie du script shell pendant que je l'exécute.
James O'Brien
2
Bien que ce soit des informations utiles, ce n'est PAS une réponse à la question. Comme l'a dit @ JamesO'Brien, la question concerne docker-compose runet se rattache à ces services, qui ont des noms uniques parmi les services répertoriés dansdocker.compose.yml
TetraDev
20

Si vous souhaitez voir les journaux de sortie de tous les services de votre terminal.

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

Exemple: Supposons que vous souhaitiez enregistrer la sortie des 5 dernières lignes de tous les services

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

Si vous souhaitez enregistrer la sortie de services spécifiques, vous pouvez le faire comme ci-dessous:

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

Usage:

Par exemple. dites que vous avez des services d'API et de portail, vous pouvez faire quelque chose comme ci-dessous:

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

Où 5 représente les 5 dernières lignes des deux journaux.

Réf: https://docs.docker.com/v17.09/engine/admin/logging/view_container_logs/

Invincible
la source
5
  1. utilisez la commande pour démarrer les conteneurs en mode détaché: docker-compose up -d
  2. pour afficher les conteneurs, utilisez: docker ps
  3. pour afficher les journaux d'un conteneur: docker logs <containerid>
akshaya pandey
la source
1

Malheureusement, nous devons exécuter docker-compose logsséparément de docker-compose run. Pour que cela fonctionne de manière fiable, nous devons supprimer l' docker-compose runétat de sortie, puis rediriger le journal et quitter avec le bon état.

#!/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
la source