首页 > 解决方案 > gunicorn:错误:在 Docker 中运行烧瓶应用程序时无法识别的参数

问题描述

免责声明:我对 Docker 和 gunicorn 非常熟悉。我在 docker 容器中运行 Flask 应用程序。我正在运行以下内容:

docker run --runtime=nvidia -it my-image:0.1

并在日志中:

[2019-09-18 18:02:21 +0000] [9] [INFO] Booting worker with pid: 9
usage: gunicorn [-h] [--model MODEL] [--cam_id CAM_ID] [--cam_width 
 CAM_WIDTH]
            [--cam_height CAM_HEIGHT] [--scale_factor SCALE_FACTOR]
            [--notxt]
gunicorn: error: unrecognized arguments: -b :8080 main:app

我知道这个问题已被多次问过(例如,这里这里这里),但似乎没有一个答案有帮助。

这是我的内容Dockerfile

FROM gcr.io/deeplearning-platform-release/pytorch-gpu.1-1

RUN apt-get update
ADD . /app
WORKDIR /app

RUN pip install --no-cache-dir -r requirements.txt

ENTRYPOINT ["gunicorn", "-b", ":8080", "main:app"]

main.py看起来像这样:

from flask import Flask, request
import model

app = Flask(__name__)

@app.route('/getduration', methods=['POST'])
def get_duration():
    try:
        video_url = request.args.get('video')
    except:
        video_url = None   
    try:
        duration = model.run(video_url)
        result = str(duration)
        return result, 200
    except Exception as e:
        error = f"There was an error: {e}"
        return error, 500

if __name__ == '__main__':
    app.run(host='127.0.0.1', port=8080, debug=True)

我尝试创建一个 wsgi.py 文件,其中包含:

from main import app

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

然后更改了我的 Dockerfile 入口点:

ENTRYPOINT ["gunicorn", "-b", ":8080", "wsgi:app"]

我错过了什么?

请注意,如果我只是python main.py在容器内运行,我的烧瓶应用程序可以正常工作。当我将Dockerfile入口点更改为CMD ["python", "main.py"]时,服务器会运行,但在我发出请求时没有得到任何响应。

标签: dockerflaskdockerfilegoogle-compute-enginegunicorn

解决方案


推荐阅读