Pycharm调试docker compose中的manage.py命令
Posted
技术标签:
【中文标题】Pycharm调试docker compose中的manage.py命令【英文标题】:Pycharm debugging manage.py commands in docker compose 【发布时间】:2019-02-26 23:50:24 【问题描述】:我有一个非常简单的设置。我正在运行 Pycharm 2018.2.3 并使用 docker compose 启动 3 个容器。
-
我的 Django 应用程序
nginx 提供静态服务
Postgres 数据库
我已经为调试容器配置了远程解释器,并且断点在大多数情况下都可以正常工作,至少当我点击我的 API 端点或对 django 应用程序执行一些其他操作时。
什么不起作用,是当我运行我的管理自定义 manage.py 自定义命令之一时。到目前为止,我已经尝试了这两种方法。
我在 PyCharm 中设置了另一个调试配置来执行命令。这会导致另一个容器旋转(代替原来的容器。运行命令,而不会中断任何换行符。然后整个容器关闭。
我已经登录容器,直接通过命令行运行manage.py命令,在容器中执行,还是没有断点。
文档似乎在正常情况下工作,但我在容器中调试这些命令时找不到任何帮助。
感谢任何帮助或提示。
【问题讨论】:
到目前为止,我认为效果最好的是我只是将我的 manage.py 命令绑定到我的 API 服务中。我可以使用我通常使用 API 和常规 PyCharm 调试器运行的任何命令,在我的容器中运行就可以了。 【参考方案1】:为了在 Docker 容器中调试 Django 命令,您可以使用以下设置创建新的运行/调试配置
-
使用 Python 配置模板
脚本路径:
manage.py
的绝对位置
参数:要调试/执行的Django命令
!important!
Python 解释器:Docker Compose interpreter
【讨论】:
【参考方案2】:只是更新,以防有人遇到类似问题。我个人的解决方案是不使用 manage.py 命令,而是通过 http 调用使这些相同的命令可用。
我发现简单地拥有像 myserver.com/api/do-admin-function 这样的端点并将其限制为管理访问会更容易(而且通常更有用)。
当我在我的代码中放置断点时,即使在容器中运行,它也会按预期中断,并允许我按照我想要的方式进行调试
【讨论】:
有趣,而且比我自己的回答更具体。赞成。【参考方案3】:这取决于您的docker-compose.yml
的确切内容。
例如参见Adam King的文章“A Simple Recipe for Django Development In Docker (Bonus: Testing with Selenium)”的“An interactive debugger inside a running container!”部分。
他的docker-compose.ym
l 包括:
version: "2"
services:
django:
container_name: django_server
build:
context: .
dockerfile: Dockerfile
image: docker_tutorial_django
stdin_open: true
tty: true
volumes:
- .:/var/www/myproject
ports:
- "8000:8000"
在里面,看:
stdin_open: true
tty: true
[这两行] 很重要,因为它们让我们运行交互式终端。 点击 ctrl-c 以终止在您的终端中运行的服务器,然后在后台使用
docker-compose up -d
启动它。docker ps
告诉我们它还在运行:我们需要附加到正在运行的容器,以便查看其服务器输出和 pdb 断点。 命令
docker attach django_server
将显示一个空行,但如果您刷新 Web 浏览器,您将看到服务器输出。 将import pdb; pdb.set_trace()
放入您的代码中,您将获得交互式调试器,就像您习惯的那样。
【讨论】:
感谢您的回复。我相信即使没有在 docker compose 中添加选项(我没有),我仍然可以通过执行 docker attach -it /bin/sh 来获得交互式终端。但我试图让 PyCharm IDE 调试器在运行 manage.py 命令时中断。我现在没有使用任何 pbd 代码。是否只需要 get 获取 manage.py 命令才能在编辑器中中断? @G.Ball 本地应用不需要,但远程应用需要...youtrack.jetbrains.com/issue/PY-22623以上是关于Pycharm调试docker compose中的manage.py命令的主要内容,如果未能解决你的问题,请参考以下文章
Pycharm 在 docker 托管应用程序上运行“使用 cython 的调试器加速”
docker-compose 用于将 VS Code 中的 node.js 调试器附加到 WSL docker 中的节点进程
使用`docker-compose run`时无法调试,但`docker-compose up`有效