将 pdb 与主管一起使用

Using pdb with 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

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

Gunicorn 将在后台启动线程或进程,很难附加到它们的标准输入。因此,您希望主 PID 1 具有标准输入并附加到同一标准输入。您需要更改 docker-compose.yml 并将以下参数添加到您的 django 服务

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

然后 docker-compose 不允许连接到标准输入,因此您需要在分离模式下启动它

docker-compose up -d

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

docker attach <project>_<djangocontainername>_1

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