运行 Python 调试器在 Docker 图像中

Running a Python debugger in a Docker Image

我最近按照以下教程尝试使用 VSCode 在 Docker 容器中调试 python 代码:

https://www.youtube.com/watch?v=qCCj7qy72Bg&t=374s

我的 Docker 文件如下所示:

FROM ubuntu as base

#Do standard image stuff here


#Python Debugger

From base as debugger

RUN pip3 install debugpy

ENTRYPOINT ["python3","-m","debugpy","--listen","0.0.0.0:5678","--wait-for-client"]

我交替尝试完全复制教程并改用以下 ENTRYPOINT:

ENTRYPOINT ["python3","-m","debugpy","--listen","0.0.0.0:5678","--wait-for-client","-m"]

我还配置了一个 VSCode 远程附加调试实例到 launch.json:

{"name":"Python: Remote Attach","type":"python","request":"attach","connect":{"host":"5678","port":5678},"pathMappings":[{"localRoot":"${workspaceFolder}","remoteRoot":"."}]}, 

我希望调试器单独单独调试当前文件,或者 运行 我用来 运行 整个项目的文件,名为 init.py 在 docker 容器中使用调试器。

目前,当我构建 运行 docker 容器时

docker run -p 5678:5678 CONTAINERNAME python3 /home/init.py

它在 Visual Studio 端挂起并超时。

在视频中,他用它来 运行 python unittest 模块,这就是为什么我尝试从最后取出 -m我的修改版本中的命令。但是,看起来 debugpy 不知道该怎么做。我已经尝试在远程调试器之前 运行 连接 docker 实例,或者在 docker 实例之后连接远程调试器,但错误仍然存​​在并且调试不起作用。如何使用 VSCode 远程调试到 docker 实例?

编辑:

感谢 FlorianLudwig 指出我的原始代码使用逗号表示 IP 而不是所需的句点。

我已经编辑了问题以反映这一变化。它消除了 python 抱怨地址格式错误的问题,但似乎我仍然遇到调试器的某种连接问题。

编辑2:

我想我找到了导致连接问题的原因。看来 visual studio 默认是使用与相关端口号相同的主机。我将我的主机更改为 0.0.0.0 并且我能够通过 运行 连接容器然后通过 Visual Studio 调试连接到它来进行调试。

在您的 Dockerfile 中:

"0,0,0,0:5678" 应该是 "0.0.0.0:5678"

让它成为一个有效的IP地址。 0.0.0.0 基本上意味着“任何”IP 地址。