我很难弄清楚如何设置在 Docker 容器中运行的 python 应用程序 (Flask) 的远程调试。 具体来说,我使用的是 docker-compose、PyCharm professional 和 python 3.5。 这就是我到目前为止所做的:
我在 wsgi.py 文件中添加了以下几行:
import sys
sys.path.append('../pycharm-debug-py3k.egg')
import pydevd
pydevd.settrace('0.0.0.0', port=8200, stdoutToServer=True, stderrToServer=True)
我在PyCharm中创建了一个远程调试配置(通过将我的本地机器项目路径映射到docker容器中的路径)
通过从 PyCharm 运行调试配置(单击错误图标),它会打印(并挂起):
Starting debug server at port 4200
Use the following code to connect to the debugger:
import pydevd
pydevd.settrace('0.0.0.0', port=4200, stdoutToServer=True, stderrToServer=True)
Waiting for process connection...
...在 docker 容器日志中我读到:
无法连接到 0.0.0.0: 4200
我该怎么办? (我的目标是能够在 PyCharm 中添加断点并停止 docker 容器应用程序的执行以对其进行调试)
使用
host.docker.internal
而不是 0.0.0.0
。这将允许 docker 决定使用哪个 IP。
使用远程解释器,这将立即解决几个问题。我已经在这里回答了这个问题Docker开发环境中的丰富编辑器
将远程 python SDK 添加到您的 IDE,这也将解析远程安装的所有库。不过,您将需要 SSH 连接才能完成此操作,因此请安装 sshd 并使用我在答案中概述的共享开发人员密钥。
尽管现在需要付出更多的努力,但我会给您带来更好的结果,也在您尚未遇到的其他部分中,并且在仅进行远程端口连接时会发现。
如果您仍然想使用基于端口的调试,请参阅Docker:MacOSX 将容器端口暴露给主机 - 这解释了您应该如何理解附加和侦听部分。
也许你应该连接到你自己的主机,即你的pycharm所在的机器。而不是0.0.0.0,而不是你自己的IP地址
我最近必须自己设置相同的工作流程,并决定创建一个简单的示例存储库来逐步完成设置过程。
希望这可以帮助那些想要做同样事情的人。