web-dev-qa-db-fra.com

Comment afficher les journaux d'une image Docker?

Dans le monde docker, on peut facilement voir les journaux du conteneur docker (c'est-à-dire une image en cours d'exécution). Mais lors de la création d'image, on émet généralement plusieurs commandes. Par exemple, les commandes d'installation npm dans les projets de noeud. Il serait également utile de voir les journaux de ces commandes. J'ai rapidement cherché dans la documentation, mais je n'ai pas trouvé comment obtenir des journaux pour l'image de docker. C'est possible?

13
Ville Miekk-oja

La méthode la plus simple consiste à utiliser tee pour envoyer une copie de toutes les sorties de vos commandes dans un fichier journal. Si vous souhaitez le joindre à l'image, affichez vos commandes d'exécution dans un fichier journal à l'intérieur de l'image avec quelque chose comme:

RUN my-install-cmd | tee /logs/my-install-cmd.log

Ensuite, vous pouvez exécuter un conteneur unique rapide pour afficher le contenu des journaux:

docker run --rm my-image cat /logs/my-install-cmd.log

Si vous n'avez pas besoin des journaux attachés à l'image, vous pouvez enregistrer la sortie de chaque build avec une seule modification de votre commande de build (au lieu de beaucoup de changements dans les commandes d'exécution) exactement comme JHarris le dit:

docker build -t my-image . | tee my-image.build.log

Si vous construisez sans utiliser --rm=true, vous avez alors tous les conteneurs intermédiaires, et chacun d'eux a un journal que vous pouvez consulter avec

docker logs $container_id

Et enfin, n'oubliez pas qu'il y a un historique des calques dans l'image. Ils ne montrent pas la sortie de chaque commande, mais cela est utile pour toutes ces commandes qui n'enregistrent aucune sortie et sachant de quelle génération chaque couche provient, en particulier lorsqu'il y a beaucoup de mise en cache utilisée.

docker history my-image
13
BMitch

Utilisez ceci: https://github.com/jcalles/docker-wtee
Lisez les instructions et faites-moi part de vos commentaires.
Ou...
Si vous devez obtenir des journaux du conteneur en cours d'exécution et que le conteneur a des volumes exposés, exécutez ceci:

docker run --rm -it --name testlogs --link <CONTAINERNAME/ID> --network CONTAINERNETWORK -p PORT:8080 --volumes-from CONTAINERNAME/ID  javiercalles/wtee sh
0
Javier Calles