Pas besoin de rediriger les journaux.
Docker stocke par défaut les journaux dans un fichier journal. Pour vérifier le chemin du fichier journal, exécutez la commande:
docker inspect --format='{{.LogPath}}' containername
/var/lib/docker/containers/f844a7b45ca5a9589ffaa1a5bd8dea0f4e79f0e2ff639c1d010d96afb4b53334/f844a7b45ca5a9589ffaa1a5bd8dea0f4e79f0e2ff639c1d010d96afb4b53334-json.log
Ouvrez ce fichier journal et analysez.
si vous redirigez les journaux, vous n'obtiendrez que les journaux avant la redirection. vous ne pourrez pas voir les journaux en direct.
ÉDITER:
Pour voir les journaux en direct, vous pouvez exécuter la commande ci-dessous
tail -f `docker inspect --format='{{.LogPath}}' containername`
Remarque:
Ce fichier journal /var/lib/docker/containers/f844a7b45ca5a9589ffaa1a5bd8dea0f4e79f0e2ff639c1d010d96afb4b53334/f844a7b45ca5a9589ffaa1a5bd8dea0f4e79f0e2ff639c1d010d96afb4b53334-json.log
ne sera créé que si le docker génère des journaux s'il n'y a pas de journaux, ce fichier ne sera pas là. c'est similaire comme parfois si nous exécutons la commande docker logs containername
et qu'elle ne renvoie rien. Dans ce scénario, ce fichier ne sera pas disponible.
tail -f `docker inspect --format='{{.LogPath}}' myapp`
- c'est vraiment JSONQue diriez-vous de cette option:
docker logs containername >& logs/myFile.log
Il ne redirigera pas les journaux demandés dans la question, mais les copiera une fois dans un fichier spécifique.
la source
docker logs --help
pour être sûrdocker logs -f <yourContainer> &> your.log &
Explication:
-f
(ie--follow
): écrit tous les journaux existants et continue ( suit ) la journalisation de tout ce qui vient ensuite.&>
redirige à la fois la sortie standard et l'erreur standard.&
.> output.log 2> error.log
(au lieu d'utiliser&>
).la source
Pour capturer à la fois stdout et stderr de votre conteneur Docker dans un seul fichier journal, exécutez ce qui suit:
la source
En supposant que vous disposez de plusieurs conteneurs et que vous souhaitez regrouper les journaux dans un seul fichier, vous devez utiliser un agrégateur de journaux tel que fluentd. fluentd est pris en charge comme pilote de journalisation pour les conteneurs Docker.
Donc, dans docker-compose, vous devez définir le pilote de journalisation
La deuxième étape serait de mettre à jour la conf fluentd pour gérer les journaux pour le service 1 et le service 2
Dans cette configuration, nous demandons que les journaux soient écrits dans un seul fichier sur ce chemin
/fluentd/log/service/service.*.log
et la troisième étape serait d'exécuter le fluentd personnalisé qui commencera à écrire les journaux dans le fichier.
Voici le lien pour des instructions étape par étape
Bit Long, mais de manière correcte car vous obtenez plus de contrôle sur le chemin des fichiers journaux, etc. et cela fonctionne bien dans Docker Swarm aussi.
la source
Puisque Docker fusionne stdout et stderr pour nous, nous pouvons traiter la sortie du journal comme n'importe quel autre flux shell. Pour rediriger les journaux actuels vers un fichier, utilisez un opérateur de redirection
$ docker logs test_container > output.log
docker logs -f test_container > output.log
Au lieu d'envoyer la sortie vers stderr et stdout, redirigez la sortie de votre application vers un fichier et mappez le fichier vers un stockage permanent en dehors du conteneur.
$ docker logs test_container> /tmp/output.log
Docker n'acceptera pas les chemins relatifs sur la ligne de commande, donc si vous souhaitez utiliser un répertoire différent, vous devrez utiliser le chemin complet.
la source
Si vous travaillez sous Windows et utilisez PowerShell (comme moi), vous pouvez utiliser la ligne suivante pour capturer le
stdout
etstderr
:J'espère que ça aide quelqu'un!
la source
foreach ($element in $(docker ps -a --format "{{.Names}}")) {docker logs $element | Out-File "C:/dockerlogs/$element.log"}
Le moyen le plus simple que j'utilise est cette commande sur le terminal:
la structure est:
la source
Vérifiez d'abord votre identifiant de conteneur
Vous pouvez voir la première ligne dans les colonnes CONTAINER ID. Cela ressemble probablement à ceci "3fd0bfce2806" puis tapez-le dans le shell
Vous verrez quelque chose comme ça
alors vous pouvez le voir comme
Ce serait au format JSON, vous pouvez utiliser l'horodatage pour tracer les erreurs
la source
Script Bash pour copier tous les journaux de conteneur dans un répertoire spécifié:
la source