Debugging python docker containers with remote-pdb, docker-compose

You want to debug and set breakpoints inside your docker container and/or you want to debug with docker-compose.

Warning:
As the docs say: The debug host in your Docker container must be set to 0.0.0.0 (localhost or 127.0.0.1 will not work because Docker doesn’t map the port on the local interface).

Using Remove-pdb by ionel

pip install remote-pdb==2.1.0

python3 -m venv venv
. venv/bin/activate

Build example Dockerfile

Dockerfile

FROM python:3.9.6-alpine3.14


WORKDIR /usr/src/app

COPY requirements.txt ./
RUN pip install --no-cache-dir -r requirements.txt

COPY . .

CMD [ "python", "./main.py" ]

Build it:

docker build -t example .

Run the docker container

docker run -p 4444:4444 example 

Where did 4444 come from? It comes from the main.py , we
tell remote-pdb which port to listen on- you can choose any port.

Start debugging!

  1. Ensure you have imported remote-pdb
from remote_pdb import RemotePdb
RemotePdb('127.0.0.1', 4444).set_trace()

Note: You only need to do this once.

  1. Put a breakpoint in your code (e.g. breakpoint())
  2. telnet 127.0.0.1 4444

Example docker-compose file

version: "3.9"
   
services:
  django:
    stdin_open: true
    tty: true
    build: django
    ports:
      - "8001:8000"
      - "4444:4444" # This is the debugger port