I see that I’m not the first one to ask the question but there was no clear answer to this:
How to use pdb with docker-composer in Python development?
When you ask uncle Google about
django docker you get awesome docker-composer examples and tutorials and I have an environment working – I can run
docker-compose up and I have a neat developer environment but the PDB is not working (which is very sad).
I can settle with running
docker-compose run my-awesome-app python app.py 0.0.0.0:8000 but then I can access my application over http://127.0.0.1:8000 from the host (I can with
docker-compose up) and it seems that each time I use
run new containers are made like:
dir_db_4 which I don’t desire at all.
People of good will please aid me.
I’m using pdb++ for that example and a basic docker-compose.yml from this django example. Also I experimented but nothing seems to help me. And I’m using docker-composer 1.3.0rc3 as it has Dockerfile pointing support.
Try running your web container with the –service-ports option:
docker-compose run --service-ports web
Use the following steps to attach pdb on any python script.
Step 1. Add the following in your yml file
stdin_open: true tty: true
This will enable interactive mode and will attach stdin. This is equivalent for -it mode.
docker attach <generated_containerid>
You’ll now get the pdb shell
Till my experience,
docker-compose up command does not provide an interactive shell, but it starts the printing STDOUT to default read-only shell.
Or if you have specified and mapped logs directory,
docker-compose up command will print nothing on the attached shell but it sends output to your mapped logs. So you have to attach the container separately once it is running.
when you do
docker-compose up, make it in detached mode via
-d and connect to the container via
docker exec -it your_container_name bash