带有 Gunicorn 的 Flask App 在生产中给出错误:套接字挂断
Posted
技术标签:
【中文标题】带有 Gunicorn 的 Flask App 在生产中给出错误:套接字挂断【英文标题】:Flask App with Gunicorn in production giving Error: socket hang up 【发布时间】:2021-01-22 01:26:55 【问题描述】:我有一个 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
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) 上运行良好
【问题讨论】:
我无法使用上面的代码 sn-ps 重新创建您的问题。有一些事情首先阻止了 docker 容器的构建(api 文件夹不存在,所以我从 api 中删除;wsgi 文件是多余的,所以我删除了它并将 if 主检查放在底部app.py; 更改了 docker CMD 以从 app:app 加载应用程序)。当我解决这些问题时,应用程序按预期运行。我怀疑这是对更大项目的简化,实际问题没有在上面的代码中表示。 【参考方案1】:尝试先在终端中自己运行 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"]
【讨论】:
以上是关于带有 Gunicorn 的 Flask App 在生产中给出错误:套接字挂断的主要内容,如果未能解决你的问题,请参考以下文章