Maison  >  Article  >  développement back-end  >  Pourquoi la sortie Python de mon conteneur Docker détaché est-elle manquante et comment puis-je y remédier ?

Pourquoi la sortie Python de mon conteneur Docker détaché est-elle manquante et comment puis-je y remédier ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-24 07:08:12455parcourir

Why is my detached Docker container's Python output missing, and how can I fix it?

Conteneurs Python détachés : sortie sans tampon pour la journalisation

Lors de l'exécution d'une application Python dans un conteneur Docker détaché à l'aide de l'indicateur -d, vous pouvez rencontrer un manque de sortie du conteneur. Bien que le conteneur semble être en cours d'exécution, les instructions d'impression attendues de l'application ne sont pas visibles dans les journaux ou via les sessions de terminal attachées.

Le problème réside dans le comportement de la fonction d'impression de Python. Par défaut, Python met sa sortie en mémoire tampon pour améliorer les performances. Cette mise en mémoire tampon n'est pas immédiatement visible dans les shells interactifs, où la sortie est imprimée dès qu'un caractère de nouvelle ligne est rencontré.

Lorsqu'elle est exécutée dans un conteneur détaché, la sortie de l'application est mise en mémoire tampon et peut ne pas être vidée immédiatement. Pour résoudre ce problème, utilisez une sortie sans tampon en ajoutant l'indicateur -u à ​​la commande Python dans le CMD du Dockerfile :

CMD ["python", "-u", "main.py"]

En utilisant une sortie sans tampon, les flux stdout et stderr de Python sont immédiatement vidés, permettant aux journaux de capturer les relevés imprimés. Vous pouvez ensuite afficher la sortie via :

docker logs myapp

Remarque :

L'indicateur -u force une sortie sans tampon, ce qui peut diminuer les performances dans certains cas. Si vous préférez contrôler manuellement le comportement de la mise en mémoire tampon de sortie, envisagez d'utiliser le module de journalisation ou d'implémenter votre propre solution de mise en mémoire tampon.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn