python - 生产中带有 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 )上运行良好
解决方案
尝试首先在终端中自己运行 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"]
推荐阅读
- c++ - 如何打印以下数组以显示数字 1 - 1000000
- firebase - 颤振错误-“参数不匹配的闭包调用:函数'[]'接收者:闭包:()=>映射
来自函数‘数据’:” - python - pytest.skip('Output string') 在哪里打印?
- java - 单击 webview 上的链接时如何在另一个 webview 中打开它?
- c# - StackExchange.Redis.ConnectionMultiplexer Dispose() 是否会导致类似于 UnsubscribeAll() 的行为?
- python - for循环中的文本框输入并在滚动框中打印文本
- c# - 为什么 Castle Windsor MVC 在服务器上不起作用?
- html - CSS 在 ioslides 中去除 Kable 样式
- docker - 如何在 docker 容器中本地运行 heroku-buildpack-nginx?
- xml - 为 xml 文件创建索引文件