【问题标题】:Using pdb with supervisor将 pdb 与主管一起使用
【发布时间】:2018-03-12 04:28:37
【问题描述】:

我正在使用 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

【问题讨论】:

  • 您正在以 PID 1 的身份运行主管,这种方法将不起作用。您需要为 nginx 和 djnagoserver 使用单独的容器
  • @TarunLalwani 谢谢你。分离容器后终于可以工作了。

标签: django nginx docker-compose gunicorn supervisord


【解决方案1】:

如果你想调试,那么你必须把 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)终端时会显示

【讨论】:

  • 谢谢塔伦。当我这样做时,输出表明 djangoserver 正在运行,但实际上它似乎没有运行(当我运行我的应用程序时,它不起作用 - 我必须手动运行 runserver 在容器)。你知道为什么会这样吗?
  • 更新您在问题中使用的最终 docker-compose
  • 我已经用我的最新文件更新了我的答案。请注意:如果我将commandstdintty 移动到docker-compose.yml,则会收到一条错误消息,指出django.db.utils.OperationalError: (1130, "Host '172.18.0.3' is not allowed to connect to this MySQL server")。 PS:我不小心编辑了你的答案——希望你或其他人可以拒绝编辑。
猜你喜欢
  • 1970-01-01
  • 2014-07-13
  • 2019-10-31
  • 2018-10-02
  • 1970-01-01
  • 2020-10-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多