【发布时间】:2017-05-03 06:09:02
【问题描述】:
我最近才开始尝试围绕 Docker 进行研究,并设法让开发机器启动并运行。我现在要做的是能够在我的 python 应用程序(特别是 Django)中使用 Visual Studio Code 中的调试器。
我已尝试遵循python extension for VS Code 的有限文档,该文档解释了远程调试的参数。
Dockerfile
FROM python:3.5.2
RUN apt-get update \
--no-install-recommends && rm -rf /var/lib/apt/lists/* \
&& mkdir -p /code \
EXPOSE 8000
WORKDIR /code
COPY requirements.txt /code
RUN /bin/bash --login -c "pip install -r requirements.txt"
ADD . /code
CMD []
docker-compose.yml
version: '2'
services:
db:
image: postgres
web:
build: .
volumes:
- .:/code
ports:
- "8000:8000"
command: bash -c "./wait-for-it.sh db:5432 && python manage.py migrate && python manage.py runserver 0.0.0.0:8000 --noreload"
depends_on:
- db
launch.json
{
"name": "Attach (Remote Debug)",
"type": "python",
"request": "attach",
"localRoot": "${workspaceRoot}",
"remoteRoot": "/code",
"port": 8000,
"secret": "debug_secret",
"host": "localhost"
}
我还在其中一个项目文件中添加了 ptvsd.enable_attach("debug_secret", address = ('0.0.0.0', 8000)) 行
问题
当我启动调试器时,什么都没有发生,看起来 VS Code 正在等待断点命中。但它永远不会。
有什么想法吗?
编辑:小更新
我尝试为调试器使用不同的端口,并在docker-compose.yml 中公开新端口,但没有任何成功。看起来附加是成功的,因为调试器没有崩溃但没有触发断点。我真的被这个卡住了。
解决方案
请参阅 The Barkman 的回答。 我要补充一点,我无法使用秘密来完成这项工作。我做了以下事情:
manage.py
import ptvsd
ptvsd.enable_attach(secret=None, address=('0.0.0.0', '3000'))
launch.json
{
"name": "Attach Vagrant",
"type": "python",
"request": "attach",
"localRoot": "${workspaceRoot}",
"remoteRoot": "/code",
"port": 3000,
"secret": "",
"host":"localhost"
}
【问题讨论】:
标签: python django docker visual-studio-code docker-compose