在 VS Code 中调试 dockerized Django 导致错误“等待启动器连接超时”
Posted
技术标签:
【中文标题】在 VS Code 中调试 dockerized Django 导致错误“等待启动器连接超时”【英文标题】:Debugging dockerized Django in VS Code results in error "Timed out waiting for launcher to connect" 【发布时间】:2020-11-07 12:24:46 【问题描述】:我想在 Visual Studio Code 中使用 docker 容器调试我的 Django 应用程序。
Microsoft 发布了如何做到这一点的指南,我一步一步地遵循了该指南: https://code.visualstudio.com/docs/containers/quickstart-python
但是当我尝试运行调试器时,我收到以下错误消息:
Timed out waiting for launcher to connect
这是我一步一步做的:
-
我使用
django-admin startproject helloworld
初始化了一个简单的 Django 应用程序
在 VS Code 中,我打开了包含 manage.py
的文件夹
打开命令面板Ctrl + Shift + P
,然后选择Docker: Add Docker Files to Workspace...
选择应用平台Python: Django
包含 Docker Compose 文件No
应用入口点的相对路径manage.py
您的应用程序侦听哪些端口? 8000
VS Codes 然后创建几个文件(见下文)。
当我尝试启动调试器时(如指南中所示),我收到以下错误消息:
终端不显示任何错误消息,但执行的命令:
.vscode/launch.json:
"configurations": [
"name": "Docker: Python - Django",
"type": "docker",
"request": "launch",
"preLaunchTask": "docker-run: debug",
"python":
"pathMappings": [
"localRoot": "$workspaceFolder",
"remoteRoot": "/app"
],
"projectType": "django"
]
.vscode/tasks.json:
"version": "2.0.0",
"tasks": [
"type": "docker-build",
"label": "docker-build",
"platform": "python",
"dockerBuild":
"tag": "dockerdebugging:latest",
"dockerfile": "$workspaceFolder/Dockerfile",
"context": "$workspaceFolder",
"pull": true
,
"type": "docker-run",
"label": "docker-run: debug",
"dependsOn": [
"docker-build"
],
"python":
"args": [
"runserver",
"0.0.0.0:8000",
"--nothreading",
"--noreload"
],
"file": "manage.py"
]
Dockerfile:
# For more information, please refer to https://aka.ms/vscode-docker-python
FROM python:3.8-slim-buster
EXPOSE 8000
# Keeps Python from generating .pyc files in the container
ENV PYTHONDONTWRITEBYTECODE 1
# Turns off buffering for easier container logging
ENV PYTHONUNBUFFERED 1
# Install pip requirements
ADD requirements.txt .
RUN python -m pip install -r requirements.txt
WORKDIR /app
ADD . /app
# Switching to a non-root user, please refer to https://aka.ms/vscode-docker-python-user-rights
RUN useradd appuser && chown -R appuser /app
USER appuser
# During debugging, this entry point will be overridden. For more information, please refer to https://aka.ms/vscode-docker-python-debug
CMD ["gunicorn", "--bind", "0.0.0.0:8000", "helloworld.wsgi"]
requirements.txt:
# To ensure app dependencies are ported from your virtual environment/host machine into your container, run 'pip freeze > requirements.txt' in the terminal to overwrite this file
django==3.0.3
gunicorn==20.0.4
VS 代码版本:
1.47.1
Python 扩展版本:v2020.7.94776
【问题讨论】:
您使用的计算机系统是什么?重新加载后是否同样的问题? 我使用的是 Ubuntu 18.04,重新加载后没有运气。我刚刚检查过,VS Code 确实成功创建了一个 docker 容器,但无论如何都无法连接。 【参考方案1】:这是一个线索和解决方法:
我遵循的说明让我在我的 ubuntu WLS2 实例中打开 VS 代码。注意:我的应用程序只是一个通用的 python 应用程序,而不是 django。
如果我单击它并将其更改为作为 windows 文件夹打开,然后进行有趣的调试,一切突然对我有用。 (它启动 docker 并通过调试、断点等连接到它)
我认为对我来说发生的事情是“有时” docker 在其自己的 WSL 实例上启动容器/应用程序,而我的 ubuntu 实例无法路由到它进行调试。
我说有时,因为有时它有效。我认为这可能与我在启动机器时首先启动的应用程序(docker、ubuntu、vscode)有关。 我弄乱了 docker、资源、WSL 集成设置、windows 防火墙,并重新启动了各种东西。
我确信正确的修复并不那么复杂,但是在本机窗口中运行 VS 代码对我来说就足够了。我不明白为什么实际上需要在 WSL 中启动 VS 代码会话所增加的复杂性。
【讨论】:
【参考方案2】:在vs代码中调试的思路是:
使用 debugpy 通过端口(例如 5678)启动代码 在 vscode 中“远程附加”到该进程。我可能错了,但我可以从您的代码中看到,您没有附加到您的流程中。
我按照here 的方式编写,我使用 docker-compose 和 docker。我的方式与你的不同,但你会明白的......:)
【讨论】:
【参考方案3】:我的问题是缺少包。 Docker 通常工作正常,我之前完全没有任何问题。
我最初按照官方文档中的描述安装了 docker: https://docs.docker.com/engine/install/ubuntu/
但在我尝试安装 docker.io
包后,在 VS Code 中调试工作正常:
sudo apt install docker.io
【讨论】:
【参考方案4】:与您项目中的 vscode 教程相比,没有错误。导致错误是等待午餐器连接超时,尝试重新启动docker服务并在vscode中重新加载您的窗口。
【讨论】:
我重新启动了docker,重新加载了vscode,没有成功。我还重新启动了我的机器(Ubuntu 18.04),也没有成功。顺便说一句,VSCode 正在创建一个工作容器。 这很奇怪,因为我已经尝试过这个教程,同样的错误,但是在我重新启动 docker 并且它正在运行后,错误消失了。 我找到了解决方案(见下文),但因为我不能给自己赏金,所以你可以拥有它;-) 所以问题是缺少包裹,明白了,感谢您的赏金~以上是关于在 VS Code 中调试 dockerized Django 导致错误“等待启动器连接超时”的主要内容,如果未能解决你的问题,请参考以下文章
在 VS Code 中调试 dockerized Django 导致错误“等待启动器连接超时”
使用 VS Code 调试在 Docker 容器中使用 ts-node 运行的 TypeScript 应用程序时,如何能够正确设置断点?
docker-compose 用于将 VS Code 中的 node.js 调试器附加到 WSL docker 中的节点进程
VS Code 没有为在 Docker 容器中运行的 Node 应用程序打断点