Pycharm在Docker中调试manage.py命令

时间:2018-09-23 03:59:17

标签: python django docker pycharm remote-debugging

我有一个非常简单的设置。我正在运行Pycharm 2018.2.3,并使用docker compose来启动3个容器。

  1. 我的Django应用程序
  2. NGINX提供静态服务
  3. Postgres数据库

我已经配置了远程解释器来调试容器,并且断点在大多数情况下都可以正常工作,至少在我击中API端点或对django应用程序执行某些其他操作时。

什么不起作用,是当我运行我的manage custom custom manage.py custom命令之一时。到目前为止,我已经尝试了这两种方法。

  1. 我在PyCharm中设置了另一个调试配置以执行命令。这导致另一个容器旋转(代替原始容器。运行该命令,不中断任何换行符。然后关闭整个容器。

  2. 我已经登录到容器,直接通过命令行运行manage.py命令,它在容器中执行,但又没有断点。

该文档似乎在正常情况下可以正常工作,但是在容器中调试这些命令方面我找不到任何帮助。

感谢任何帮助或提示。

2 个答案:

答案 0 :(得分:1)

只是更新,以防有人遇到类似问题。我个人的解决办法是不使用manage.py命令,而是让这些可用相同的命令通过HTTP调用。

我发现,这是比较容易的(通常更是有用的)简单地具有像myserver.com/api/do-admin-function端点和限制到管理访问权限。

当我把我的代码中设置断点,即使在容器中运行,它打破了预期就好了,让我调试,我想

答案 1 :(得分:0)

这可能取决于您的docker-compose.yml的确切内容。

例如,请参见An interactive debugger inside a running container!中文章“ A Simple Recipe for Django Development In Docker (Bonus: Testing with Selenium) ”的“ Adam King”部分。

他的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
  

[这2行]很重要,因为它们使我们可以运行交互式终端。
  按下 ctrl - c 终止运行在终端中的服务器,然后使用docker-compose up -d在后​​台将其启动。
  docker ps告诉我们它仍在运行:

     

我们需要附加到正在运行的容器,以查看其服务器输出和pdb断点。
  docker attach django_server命令将显示空白行,但是如果刷新Web浏览器,则会看到服务器输出。
  将import pdb; pdb.set_trace()放入您的代码中,就可以像以前一样获得交互式调试器。

相关问题