我正在使用docker compose
运行我的django应用。 Ngninx
和gunicorn
通过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
答案 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)
终端时会显示