Python + docker-compose: nem (mindig) működik a print()

Python logó
Probléma: A Docker konténerbe csomagolt, majd docker-compose-zal futtatott Python alkalmazás alkalmazásban nem (mindig) működik a print() parancs. Konténeren kívül ugyanakkor minden rendben.

Ok: A Python úgynevezett output bufferinget használ, melynek lényege, hogy a print() által kiírt üzenet nem kerül azonnal megjelenítésre, hanem vár valamire, például úgy sor /n karakterre. Ez normál esetben lehet, hogy fel sem tűnik.
Megoldás #1: Ha nem zavar a jelenség, de van néhány üzenet, amit mindenképpen meg akarsz jeleníteni, akkor a flush = true paramétert add meg a print()-nek: print("Hello World", flush = True)
Megoldás #2: Ha bizonyos eseményekkor szeretnél minden üzenetet látni, akkor a sys modul kell neked és ez a parancs: sys.stdout.flush()
Megoldás #3: Ha mindig mindent azonnal szeretnél látni, akkor a PYTHONUNBUFFERED környezeti változó értéke legyen 1. Ez beállítható a Dockerfile-ban az ENV PYTHONUNBUFFERED 1 sorral vagy a docker-compose.yaml-ban is az environment szekcióban.
Megoldás #4: Ha van lehetőséged a Python indítási paramétereinek a változtatására, akkor az -u paraméter szinten eléri a kívánt célt.