Docker-compose problem in python, only shows python output when python code exists

I’m having a simple but annoying problem. When I launch my container through terminal using docker run, the python script it is supposed to run, runs normally. But when the same container is started through docker-compose, its output will only appear when the python code exits. So, for example:

print("hi")
from time import sleep
sleep(10)

It’ll display “hi” after 10 seconds when the container that runs it is called through docker-compose, and will display “hi” and exit after 10 seconds when called through docker run.

Docker version 17.09.1-ce, build 19e2cf6
docker-compose version 1.18.0, build 8dd22a9

Anyone knows what might be happening?

I feel like it should be better documented than here, but by default Python will send each line to stdout (or other files) when a newline is written if the output file is a tty, and otherwise will buffer some amount in memory until the process exits. You can set the PYTHONUNBUFFERED environment variable, or tell docker-compose to allocate a tty.

1 Like

Thanks for sharing an information By default it will print one by one code. If you still finding an issue then you can also do best python course in Noida.