首页 > 解决方案 > 生产中带有 Gunicorn 的 Flask App 给出错误:套接字挂断

问题描述

我有一个 Flask 应用程序在 Paperspace 服务器上使用 Gunicorn 作为 Docker 容器运行 -

Dockerfile

FROM ubuntu:18.04
FROM python:3
RUN apt-get update -y && apt-get install -y python-pip python-dev
COPY . /backend
WORKDIR /backend
RUN pip3 install -r requirements.txt
EXPOSE 8000
CMD gunicorn --timeout 10000 --workers 4 --log-level debug --bind 0.0.0.0:8000 wsgi:app

应用程序.py

#!/usr/bin/env python
# -*- coding: utf-8 -*- 
from flask import Flask, request

UPLOAD_FOLDER = '/uploads'
app = Flask(__name__)
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER
           
@app.route('/upload_file', methods=['GET', 'POST'])
def upload_file():
    return "it works fine"

wsgi.py

from api import app

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

我使用它运行它

sudo docker run -it -p 8000:8000 myFlaskApp:1.28

在从 Postman 触发 API (/upload_file) 时,我得到了

Error: socket hang up

但是,这个 API 在 localhost ( http://0.0.0.0:8000 )上运行良好

标签: pythondockerapiflaskgunicorn

解决方案


尝试首先在终端中自己运行 gunicorn 服务器(没有 docker)

gunicorn -w xx -t xx -b 0.0.0.0:8080 wsgi:app

如果 gunicorn 运行良好,那么它的 dockerfile 有问题。我认为您应该将 ENTRYPOINT 设为 gunicorn,然后在 CMD 中指定参数。

ENTRYPOINT ["gunicorn"]
CMD ["-w", "4", "-t", "10000", "-b", "0.0.0.0:8080", "wsgi:app"]

推荐阅读