gpt4 book ai didi

python - 调试在 Docker 中运行的 python 应用程序

转载 作者:太空狗 更新时间:2023-10-30 00:54:06 25 4
gpt4 key购买 nike

我最近才开始尝试全神贯注于 Docker,并设法启动并运行了一台开发机器。我现在要做的是能够在我的 Python 应用程序(特别是 Django)中使用 Visual Studio Code 中的调试器。

我尝试遵循 python extension for VS Code 的有限文档其中解释了远程调试的参数。

Docker文件

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

启动.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 中公开新端口,但均未成功。看起来附加成功了,因为调试器没有崩溃但没有触发断点。我真的坚持这个。

解决方案

请参阅 theBarkman 的回答。我要补充一点,我无法使用 secret 来使它正常工作。我做了以下事情:

管理.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"
}

最佳答案

通过将 ptvsd 代码放入我的 manage.py 文件并关闭 Django 的实时代码重新加载,我获得了最成功的远程调试 dockerized Django 项目。

由于 Django 在您 runserver 时基本上启动了 2 个服务器(一个用于实时代码重新加载,另一个用于实际的应用程序服务器`,ptvsd 似乎真的很困惑它应该监视哪个服务器。我可以通过等待附件、尝试/排除 enable_attach 方法或中断调试器来让它工作——但断点永远不会工作,而且我似乎一次只能调试一个文件。

如果您在启动服务器时使用 django 标志 --noreload,您可以将 ptvsd 放入 manage.py 文件中,而无需等待/中断调试器废话,并享受更强大的调试体验。

管理.py:

import ptvsd
ptvsd.enable_attach(secret='mah_secret', address=('0.0.0.0', 3000))

运行服务器:

python manage.py runserver 0.0.0.0:8000 --noreload

希望这对您有所帮助!

关于python - 调试在 Docker 中运行的 python 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41201438/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com