将pdb与supervisor一起使用

时间:2017-09-30 12:46:58

标签: django nginx docker-compose gunicorn supervisor

我正在使用docker compose运行我的django应用。 Ngninxgunicorn通过supervisor运行。

但是我似乎无法弄清楚如何使用pdb进行调试。当我使用时:

import pdb
pdb.set_trace()

运行命令docker-compose up后,我的应用程序和数据库开始运行,终端屏幕保持活动状态,等待进一步显示输出。

当我的代码到达pdb.set_trace()时,上述终端保持不变,但(pdb)界面没有出现。

有人知道如何使用pdb调试我的应用程序吗?还有其他我需要使用的东西吗?

谢谢。

更新

docker-compose.yml

version: '3'

services:
  db:
    image: mysql/mysql-server:latest
    container_name: my_container_name
    ports:
      - "3306:3306"
    environment:
      MYSQL_DATABASE: "mydb"
      MYSQL_USER: "myusername"
      MYSQL_PASSWORD: "mypass"
      MYSQL_ROOT_PASSWORD: "mypass"
      MYSQL_ALLOW_EMPTY_PASSWORD: "yes"
    command: mysqld

  web:
    build: .
    container_name: my_container_name
    ports:
      - "9000:9000"
    depends_on:
      - db

supervisord.conf

[supervisord]
nodaemon=true

[program:nginx]
command=/usr/sbin/nginx

[program:djangoserver]
command=python /myapp/djangorest/manage.py runserver localhost:8000
stdin_open: true
tty: true

1 个答案:

答案 0 :(得分:1)

如果你想调试那么你将不得不从画面中取出gunicorn并使用django manage.py runserver直接启动django。

Gunicorn将在后台启动线程或进程,并且难以附加到他们的stdin。所以你希望主PID 1具有stdin并附加到它。您需要更改为docker-compose.yml并将以下参数添加到您的django服务

command: python manage.py runserver 0.0.0.0:8000
stdin_open: true
tty: true

然后docker-compose不允许连接到stdin,所以你需要在分离模式下启动它

docker-compose up -d

之后,您想直接使用docker连接到django容器

docker attach <project>_<djangocontainername>_1

然后当你调试(pdb)终端时会显示