服务烧瓶应用程序与女服务员和 docker

serving flask app with waitress and docker

我正在使用 docker 提供一个烧瓶应用程序,但是 docker logs 命令显示该应用程序正在 运行ning 在 development 服务器上。我想用 waitress.

为这个应用程序提供服务

项目结构如下。 docker-compose.yml 文件构建镜像,公开端口和 运行 manage.py 文件

docker-compose.yml

  web:
    build: .
    image: web
    container_name: web
    ports:
      - 8080:5000
    command: python manage.py run -h 0.0.0.0

manage.py 文件导入 create_app 并将其提供给 FLaskGroup

from flask.cli import FlaskGroup
from project.server import create_app

app = create_app()
cli = FlaskGroup(create_app=create_app)

if __name__ == "__main__":
    cli()

project/server/__init__.py 文件导入 main_blueprint 并注册它。

from project.server.main.views import main_blueprint
from flask import Flask
import os

def create_app(script_info=None):

    app = Flask(
        __name__,
        template_folder="../client/templates",
        static_folder="../client/static",
    )

    app_settings = os.getenv("APP_SETTINGS")
    app.config.from_object(app_settings)

    app.register_blueprint(main_blueprint)

    app.shell_context_processor({"app": app})

    return app

project/server/main/views.py

from flask import render_template, Blueprint, jsonify, request

main_blueprint = Blueprint("main", __name__,)

@main_blueprint.route("/", methods=["GET"])
def home():
    return render_template("pages/home.html")


@main_blueprint.route("/test", methods=["GET"])
def parse():
    return jsonify({"result": "test"}), 202

如何修改现有代码以使用 waitressflask 应用程序提供服务?谢谢。

你运行使用python manage.py run -h 0.0.0.0,它使用经典flask run。您应该使用服务员命令 运行 您的应用。

This doc 可能对您有帮助。

我通过更改 docker-compose.yml 文件得到它 运行:

command

python manage.py run -h 0.0.0.0waitress-serve --call "project.server:create_app"

port

8080:50008080:8080

docker-compose.yml 文件现在如下所示:

  web:
    build: .
    image: web
    container_name: web
    ports:
      - 8080:8080
    command: waitress-serve --call "project.server:create_app"