在Docker容器内用VS Code调试Django时容器自动关闭如何解决
问题原因及排查方向
- 端口冲突问题
你当前launch.json中配置的attach端口是8000,这是Django本身的HTTP服务端口,不是debugpy的调试监听端口,两个服务占用同一个端口会直接导致进程冲突退出。
正确配置应为:debugpy单独监听一个未被占用的端口(通常用5678),launch.json中attach的端口修改为该调试端口,Django服务仍使用8000提供HTTP服务。 - attach地址配置错误
launch.json中的host字段是VS Code要连接的调试目标地址,本地运行Docker的场景下应填localhost而非0.0.0.0,0.0.0.0仅用于容器内debugpy的监听地址配置,错误的目标地址会导致连接异常触发进程退出。 - debugpy配置校验
排查容器内的启动配置是否符合调试要求:- 容器Python环境是否已安装
debugpy依赖 - Django启动命令是否添加了debugpy启动参数,示例参考:
python -m debugpy --listen 0.0.0.0:5678 --wait-for-client manage.py runserver 0.0.0.0:8000 docker-compose.yml中是否已暴露debugpy的监听端口(如5678:5678)
- 容器Python环境是否已安装
- 路径映射校验
确认本地${workspaceFolder}/app路径和容器内/usr/src/app路径完全对应,路径映射不匹配时,断点触发会导致debugpy找不到对应源文件,引发进程崩溃。可分别在本地和容器内打印对应路径的文件列表确认一致性。 - Django自动重载冲突
Django默认开启的代码自动重载机制会生成子进程替换原进程,会打断debugpy的连接,可在启动命令的runserver后添加--noreload参数关闭自动重载,验证是否解决退出问题。 - 容器日志排查
执行docker logs <web容器名称/ID>查看容器退出时的具体报错信息,可直接定位是端口占用、依赖缺失还是配置错误类问题。
内容的提问来源于stack exchange,提问作者Rodragon
相关产品推荐
相关产品推荐

