如何在运行 Django 的 docker-compose 设置中在单元测试中命中 Vscode 断点

Joh*_*aly 11 django docker docker-compose visual-studio-code

我想做的事情看起来很简单,但真正实现却非常困难。我有一个在 docker-compose 环境中运行的 Django 应用程序,我想在 Vscode 中使用断点运行和调试单元测试。

由于这是一个大项目,团队不一定使用 vscode,因此我无法随意添加库(例如 ptvsd)。我希望有一个神奇的配置tasks.jsonlaunch.json可以让事情顺利进行。

我有一个用于 postgres 数据库的容器,一个用于 django,一个用于 redis,所有这些都在 docker-compose.yml 中定义。我可以在终端中运行一个命令来运行测试,它是:

docker-compose run --rm app python manage.py test 
Run Code Online (Sandbox Code Playgroud)

appdjango 应用程序容器在哪里。我希望能够以能够在 vscode 中命中断点的方式运行此命令。

我对launch.json文件的不完整分析如下所示:

docker-compose run --rm app python manage.py test 
Run Code Online (Sandbox Code Playgroud)

和我的tasks.json

{
  "configurations": [{
    "name": "Docker: Python - Django",
    "type": "docker",
    "request": "launch",
    "preLaunchTask": "compose-for-debug",
    "python": {
      "pathMappings": [{
        "localRoot": "${workspaceFolder}",
        "remoteRoot": "/app"
      }],
      "projectType": "django"
    }
  }]
}
Run Code Online (Sandbox Code Playgroud)

我想我需要以某种方式将构建任务转换为 docker compose 任务,但我只是不知道它是如何完成的。在终端中运行容器并以某种方式使 vscode 在启用断点的情况下附加到它们也可能是有意义的。

即使对如何解决这个问题提供一些帮助也会很棒。我知道这是一个棘手的问题。

Joh*_*aly 2

这个问题变得有些流行,但一直没有直接的答案。如果您来到这里寻找一种使用 docker 在 vscode 中命中断点的方法,我的建议是使用该Remote Container扩展。

当容器启动时,右键单击它并在容器本身内部打开一个 vscode 窗口。然后一切都会正常进行。