【问题标题】:How to debug a dockerized Django app with PyCharm如何使用 PyCharm 调试 dockerized Django 应用程序
【发布时间】:2021-07-30 02:50:52
【问题描述】:

我有一个 Django 应用程序及其在 docker 容器中运行的依赖项(在带有 WSL2 的 Windows 10 上)。这工作正常,但我希望能够通过 PyCharm Pro 对其进行调试。这是我在 docker-compose 中的 web 容器

  # The main container - containing the Django code
  web:
    build: ./web
    ports:
      - "8000:8000"
    depends_on:
      - postgres #wait for postgres to be started, not for ready
      - redis
      - npm_watch
    volumes:
      - ./web:/usr/src/app
      - ./web/collectstatic:/usr/src/app/collectstatic
    env_file: .env
    environment:
      DEBUG: 'true'
      LOCAL: 'true'
    command: su myuser -c "/usr/local/bin/python manage.py runserver 0.0.0.0:8000"

我针对 Django 应用容器配置了一个 Docker Compose interpreter 并创建了一个 Django Server Run/Debug configuration 见下文(up 命令选项是启动所有容器)

当启动 docker-compose 时,web 容器几乎立即退出,退出代码为 0。手动重启该节点后,它保持运行,但访问主页仅显示连接错误。

当连接到该容器时,我可以看到以下进程正在运行,但只监听了端口 53240。容器没有监听 8000 端口 python -u /opt/.pycharm_helpers/pydev/pydevd.py --port 53240 --file /opt/project/web/myproject/settings.py runserver --noreload 0.0.0.0:8000

我也尝试添加 Docker 配置,但您似乎无法调试它(调试底部面板没有记录)

知道如何进行这项工作吗?我找不到很多此类设置的示例。

或者这种方式不可能,我需要使用remote debugging with PyDevd 或在 docker env 之外运行 de Django 应用程序?那将是一个遗憾......它可以在 Visual Studio Code 等其他 IDE 上工作吗?

谢谢:-)

【问题讨论】:

    标签: python django docker docker-compose pycharm


    【解决方案1】:

    看起来不寻常的项目结构被 PyCharm 搞砸了。我的项目包含 docker 配置,其中一个包含 Django 应用程序:

    • 我的项目
      • nginx
      • redis
      • postgres
      • 网络
        • 我的应用程序
        • 其他应用程序

    Pydevd 正在运行自己的命令来启动服务器(在 --file 之后)并忽略 docker-compose 中定义的命令。看来它依赖于在设置中配置 Django 框架的方式。 Manage Script 属性被奇怪地设置为 settings.py 而不是 C:/Users/Martin/workspace/myproject/web/manage.py。这帮助 pydevd 知道它应该使用 manage.py 而不是 settings.py

    我还必须在 Django 服务器配置中指定环境变量 DJANGO_SETTINGS_MODULE,其值为 myapp.settings 而不是 settings

    我在 Django 服务器配置中将 Working directory 设置为 C:\Users\Martin\workspace\myproject\web。看起来它正在使用C:\Users\Martin\workspace\mypoject\web\myapp。更改此设置时,与docker-compose exec web bash 连接时的默认文件夹相应更改

    在这些更改之后,它就像...魅力:)。这是启动容器时使用的命令

    python -u /opt/.pycharm_helpers/pydev/pydevd.py --multiprocess --qt-support=auto --port 56563 --file /opt/project/web/manage.py runserver 0.0.0.0:8000

    我还将 web 文件夹标记为 PyCharm 的源,但我不确定是否有帮助

    【讨论】:

      猜你喜欢
      • 2020-06-15
      • 2021-06-02
      • 2012-06-30
      • 1970-01-01
      • 1970-01-01
      • 2020-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多