martes, 6 de agosto de 2019

Django ipdb with docker-compose

Algunas veces necesitamos hacer debug sobre una aplicación corriendo en Django en docker-compose. Por defecto ipdb.set_trace() o breakpoint() no funciona, para hacerlo funcionar debemos hacer lo siguiente:

Para habilitar el modo interactivo debemos añadir stdin_open y tty al docker-compose.yml.

Por ejemplo:
version: "3"
services:
  app_tests:
    build: .
    stdin_open: true
    tty: true
    command: ./run_my_tests.sh

Ahora cuando corras tests con tu máquina en docker-compose se va a detener al momento que encuentre un ipdb.set_trace() o breakpoint()
Como ultimo paso solo falta usar el comando de docker attach <container id> con esto estaremos conectados al proceso que corre dentro del contenedor y podremos interactuar con el proceso.

Nota:
Si queremos obtener el id del contenedor debemos correr docker ps
Si queremos desconectarnos del contenedor sin detenerlo debemos usar Ctrl+pCtrl+q