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

时间:2016-06-13 21:47:15

标签: docker flask dockerfile

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

CREATE OR REPLACE PROCEDURE MY_ROLE_GRANTING_PROCEDURE

IS

BEGIN

EXECUTE IMMEDIATE 'grant some_role to rjones';

END;

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

FROM jazzdd/alpine-flask

EXPOSE 80

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

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

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

我还引用了this页面,但没有看到任何有用的内容。

2 个答案:

答案 0 :(得分:2)

示例(简化)runthru演示文件编辑,无需重新启动容器重新启动,供您参考。

<强> app.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)

您需要指定烧瓶开发服务器的端口,以便与暴露的容器端口80匹配。

screenshot can be viewed here

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

  1. 从空目录开始
  2. 创建app.py
  3. docker run
  4. curl localhost(这将显示Hello,World)
  5. 编辑app.py
  6. curl localhost(这应该显示新的编辑)

答案 1 :(得分:0)

在我的情况下,我与gevent发生冲突。这是解决方法:

import os
if not (os.environ.get('FLASK_DEBUG') == 1):
    from gevent import monkey
    monkey.patch_all()