如何使用 pycharm 调试在 docker-compose 中运行的进程

Posted

技术标签:

【中文标题】如何使用 pycharm 调试在 docker-compose 中运行的进程【英文标题】:How to debug processes running inside docker-compose with pycharm 【发布时间】:2018-08-29 08:44:59 【问题描述】:

我正在尝试将本地 Pycharm + Django 切换到基于 docker 的开发环境。我在 mac 上运行并使用 Docker-Compose(几个 docker:我的 django 应用程序、一些 db 和 nginx)。

一切运行良好,代码更改立即反映在 docker 中,并且在 Pycharm 中编码时可用的正确包。一旦 docker-compose 启动,正在运行的容器列表会显示在 Pycharm 的 docker 插件窗口中,对于每个容器,我可以看到它的 log/properties/port/volume 绑定。

解释器似乎已正确配置 Docker Compose(app at [my path/docker-compose.yaml]) 作为项目解释器和 ->/code 到 docker 中正确文件夹的路径映射。

问题是我无法调试它。当我在调试对话框中选择 Docker-Compose 时,唯一可用的选项是运行,而不是调试。

在我看来,这不是 Docker/Compose 问题,而是 Pycharm 插件,它不允许使用 docker-compose 运行/调试配置在调试中运行。

知道如何使用 Pycharm 进行调试吗?

【问题讨论】:

【参考方案1】:

您应该使用标准的 Python 运行配置,而不是特定于 Docker 的配置。后者用于构建容器、启动 docker-compose 服务等。

如果选择了基于 Docker 的解释器,PyCharm 将自动启动您的服务、挂载您的代码并在具有纯 Python 运行配置的容器内执行它。

也许文档可以提供帮助:https://www.jetbrains.com/help/pycharm/using-docker-compose-as-a-remote-interpreter.html

【讨论】:

在我工作的地方,我的电脑被完全锁定,所有的开发代码都在 docker 中运行——我在外面有 pycharm。能调试就好了。 抱歉,我不确定是什么阻止了您这样做,您是否尝试在 PyCharm 中设置基于 docker 的解释器?还是在您的特定情况下是不可能的?【参考方案2】:

目前运行带有入口点的 dockerized django 存在问题,所以如果其他人带着它登陆这里,请给出问题的想法!如果您遇到此问题,请创建一个不同的 docker-compose.dev.yml 文件,仅用于在没有入口点的情况下进行调试。这是目前的解决方法

【讨论】:

您能否详细说明禁用入口点的含义。我的后续问题是如何在没有入口点的情况下执行程序?谢谢 改为使用命令,所以基本上解决方法是让 dev docker-compose.yml 运行命令,我的意思是没有 entrypoint.sh【参考方案3】:

以下是我创建的视频,展示了在 Pycharm 中运行 docker 并使用 Pycharm 断点对其进行调试的不同方法。

https://youtu.be/NMFAkrZTciM

【讨论】:

以上是关于如何使用 pycharm 调试在 docker-compose 中运行的进程的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 PYCHARM 社区版调试 Django 应用程序

如何在 PyCharm 中向后调试?

如何使用 pycharm 调试在 docker-compose 中运行的进程

如何在 Python 调试器(PyCharm)中执行 n 步(迭代)?

如何在 Python 调试器(PyCharm)中执行 n 步(迭代)?

如何使用 PyCharm 调试 Scrapy 项目