带 docker 的 Flask 调试控制台不起作用

Aug*_*ger 5 flask docker

我在 docker 中有这个烧瓶应用程序,调试模式设置为:

app_1  |  * Serving Flask app 'my_app' (lazy loading)
app_1  |  * Environment: development
app_1  |  * Debug mode: on
app_1  |  * Running on all addresses.
app_1  |    WARNING: This is a development server. Do not use it in a production deployment.
app_1  |  * Running on http://172.22.0.2:5000/ (Press CTRL+C to quit)
app_1  |  * Restarting with stat
app_1  |  * Debugger is active!
app_1  |  * Debugger PIN: 140-110-975
Run Code Online (Sandbox Code Playgroud)

当我遇到错误并单击小控制台图标时,系统会询问我输入的 PIN 码,然后得到:[console ready]

但是,当我在控制台中输入内容时,我有:

Not Found

The requested URL was not found on the server. If you entered the URL manually please check your spelling and try again.
Run Code Online (Sandbox Code Playgroud)

到网址: http://localhost:5000/submit?&__debugger__=yes&cmd=dump()&frm=140300814179632&s=ljASKJ6S2EwWtVcN8EHR

我认为可能是正确的端口没有打开,因为它可能用于 websockets(在 webpack 中热重载),但在这里,端口似乎与 web 应用程序相同(5000)。

那么知道会出什么问题吗?

谢谢

我正在使用:

Python 3.9.5
Flask 2.0.1
Run Code Online (Sandbox Code Playgroud)

编辑

这是docker-compose.yml

version: "3.3"

services:
  app:
    build: .
    command: flask run --host=0.0.0.0 --debugger
    volumes:
      - .:/app
    working_dir: /app
    ports:
      - 5000:5000
    env_file:
      - .env
Run Code Online (Sandbox Code Playgroud)

Yaz*_*dan 2

通过使用,DEBUG=True您可以告诉 Flask 在每次更改时重新加载服务器main.py。这样做时,它main.py每次都会调用,杀死应用程序,然后在5000进程中的端口中重新启动它。这是预期的行为。

你的问题与docker无关,更多的是关于在Flask应用程序中设置prometheus。

有一些扩展可以帮助解决这个问题,例如:

https://github.com/sbarratt/flask-prometheushttps://github.com/hemajv/flask-prometheus 也许这也为解决方案提供了一些线索,但请注意,这不是您在这里询问的内容。

我建议首先尝试这些扩展,这意味着重构您的代码。从那里开始,如果实现扩展时出现问题,则创建另一个提供mcve的问题。

编辑:

还有一个关于此问题的文档https://www.agiratech.com/debugging-python-flask-app-in-docker-container