Docker + Gunicorn + Flask,我不明白为什么我的设置不起作用

时间:2018-03-11 10:37:00

标签: python docker flask docker-compose gunicorn

我正在尝试用烧瓶构建一个简单的应用程序,我决定也使用gunicorn和docker。

目前我有这样的配置:

> app
    > myapp
        __init__.py
        index.html
    docker-compose.yml
    Dockerfile

我的docker-compose.yml

version: '2'
services:
  web:
    build: .
    volumes:
      - .:/app
    command: /usr/local/bin/gunicorn -b :8000 myapp:app
    working_dir: /app

我的__init__.py

import os

from flask import Flask, render_template

app = Flask(__name__)

@app.route('/')
def home():
    return render_template('index.html')

if __name__ == '__main__':
    app.run()

此最小配置有效,我可以访问我的应用程序并获取我的索引页。

我不喜欢在__init__.py内创建我的应用,因此我想将应用创建移到app.py文件中。

新结构将是:

> app
    > myapp
        __init__.py
        app.py
        index.html
    docker-compose.yml
    Dockerfile

app.py将包含旧__init__.py文件的内容,而新的__init__.py文件将为空。

这不起作用。我收到错误

  

无法找到应用程序:'myapp'

我不明白为什么。

对此有何想法?

1 个答案:

答案 0 :(得分:3)

在第一个配置中,您的Flask应用程序直接位于包myapp;移动后,它位于模块myapp.app中。

Gunicorn expects将应用指定为module_name:variable_name,有点像from module_name import variable_name

选项一:指定正确的模块路径:

/usr/local/bin/gunicorn -b :8000 myapp.app:app

选项二:将应用程序添加回myapp。在myapp/__init__.py中,添加

from .app import app

请注意,如果变量和模块共享名称,模块将会黯然失色(不是一件好事,虽然也不是关键)。