Lors de l’exécution d’un programme écrit en Python dans un conteneur Docker, il arrive régulièrement que la sortie standard reste anormalement vide :

$ docker logs my-app
$

La raison est généralement que par défaut, l’interpréteur Python utilise une mémoire tampon pour les écritures vers stdout. Les écritures sont donc différées et cela peut prendre un moment avant de voir apparaitre la moindre ligne d’écriture (selon la verbosité de votre programme).

Une solution est d’utiliser l’option -u lors de l’appel à l’interpréteur Python. Votre Dockerfile devra contenir une ligne ressemblant à ceci :

CMD ["python3", "-u", "my-app.py"]

Et ainsi :

$ docker logs my-app
It works !
$