PyCharm远程调试在docker容器中

时间:2017-01-05 11:36:45

标签: python docker pycharm

我正在努力弄清楚如何设置在Docker容器中运行的python app(Flask)的远程调试。 具体来说,我使用的是docker-compose,PyCharm professional和python 3.5。 这就是我到目前为止所做的:

  • 我将“pycharm-debug-py3k.egg”复制到项目文件夹
  • 我在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容器应用程序以进行调试)

3 个答案:

答案 0 :(得分:8)

使用远程解释器,这将同时解决几个问题。我已经在这里回答了Rich editors in a Docker development environment

将远程python SDK添加到IDE,然后这将解析远程安装的所有库。您将需要SSH连接才能完成此操作,因此请安装sshd并使用我在答案中概述的共享开发人员密钥。

即使现在这需要更多的努力,我也会给你提供更好的结果,在你还没有遇到的其他部分中,并且会在进行远程端口连接时找到它。

如果您仍想使用基于端口的调试,请参阅Docker: MacOSX Expose Container ports to host machine - 这解释了您应该如何理解附加和监听部分。

答案 1 :(得分:2)

使用host.docker.internal代替0.0.0.0。这将允许docker决定使用哪个IP。

答案 2 :(得分:0)

也许您应该连接到自己的pycharm主机,而不是0.0.0.0,而不是自己的IP地址