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!