无法使用 Docker 在调试模式下运行 Flask 应用程序

cle*_*ssi 5 flask docker dockerfile

我正在尝试使用 docker-compose 在调试模式下运行一个简单的烧瓶应用程序。我已经按如下方式创建了我的 Dockerfile:

FROM jazzdd/alpine-flask

EXPOSE 80
Run Code Online (Sandbox Code Playgroud)

我的 docker-compose 文件如下所示:

version: '2'

networks:
  test_network:
    driver: bridge

services:
  db:
    networks:
      - test_network
    image: postgres:9.5.3
    env_file:
      - docker.env
    expose:
      - 5432

  app:
    networks:
      - test_network
    build: .
    env_file:
      - docker.env
    expose:
      - 80
    ports:
      - 80:80
    volumes:
      - ./app/:/app
    command: -d
Run Code Online (Sandbox Code Playgroud)

我的 docker.env 只有 postgres 数据库的密码。我创建了一个简单的python文件,如下所示:

  from flask import Flask
  app = Flask(__name__)

  @app.route('/')
  def hello_world():
     return "Hello, World"

 if __name__ == '__main__':
     app.run(debug=True,host='0.0.0.0')
Run Code Online (Sandbox Code Playgroud)

现在要运行该应用程序,我正在使用docker-compose up -d --build命令。我假设在应用程序在服务器上启动后,当我对 app.py 文件进行任何更改时,它将反映在网页上,而无需重新启动容器。我没有看到预期的行为。我尝试设置我的本地 env 变量,FLASK_DEBUG=1但不确定这是否有帮助。我错过了什么吗?

我也参考了这个页面,但没有看到任何有用的东西。

小智 3

下面概述了一个示例(简化的)运行流程,演示了无需重新启动容器的文件编辑,供您参考。

应用程序.py

from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello_world():
    return "Hello, World"

if __name__ == '__main__':
    app.run(debug=True,host='0.0.0.0',port=80)
Run Code Online (Sandbox Code Playgroud)

您需要指定 Flask 开发服务器的端口,以匹配公开的容器端口 80。

可以在此处查看屏幕截图

屏幕截图中的步骤摘要 (MAC OS X):

  1. 从空目录开始
  2. 创建app.py
  3. 码头运行
  4. 卷曲本地主机(这将显示你好,世界)
  5. 编辑app.py
  6. curl localhost(这应该显示新的编辑)