86 votes

Faire en sorte qu'une application Docker écrive sur stdout

Je suis en train de déployer une application tierce en conformité avec la norme Avis sur le facteur 12 et l'un des points indique que les journaux d'application doivent être imprimés sur stdout/stderr : le logiciel de clustering peut alors les collecter.

Cependant, l'application ne peut écrire que dans des fichiers ou dans syslog. Comment puis-je imprimer ces journaux à la place ?

0 votes

Ils vont déjà dans le syslog. Vous pouvez simplement les récupérer à partir de là !

0 votes

@MichaelHampton, cela semble bien, mais Docker exécute un seul processus qui peut écrire sur stdout, et cela ressemble à la combinaison de deux d'entre eux ?

1 votes

Vous pouvez avoir un processus démon qui utilise syslog et avoir un processus frontal qui imprime ?

1voto

mainmachine Points 31

Je viens juste de résoudre ce problème avec apache2, et je me suis débattu avec l'utilisation de CustomLog pour essayer de rediriger vers le site de /proc/1/fd/1 mais je n'ai pas réussi à le faire fonctionner. Dans mon implémentation, apache ne fonctionnait pas en tant que pid 1 donc La réponse de kolypto n'a pas fonctionné tel quel. L'approche de Pieter semblait convaincant, alors j'ai fusionné les deux et le résultat fonctionne à merveille :

# Redirect apache log output to docker log collector
RUN ln -sf /proc/1/fd/1 /var/log/apache2/access.log \
    && ln -sf /proc/1/fd/2 /var/log/apache2/error.log

Techniquement, cela permet de garder l'apache access.log y error.log va stdout y stderr en ce qui concerne le collecteur de logs de Docker, mais ce serait génial s'il y avait un moyen de séparer les deux à l'extérieur de le conteneur, comme un interrupteur pour docker logs qui ne montrerait que l'un ou l'autre...

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X