运行 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 地址。
我最近按照以下教程尝试使用 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 地址。