如何使用docker-compose设置Flask+Gunicorn+Nginx?

问题描述 投票:0回答:1

我的 Flask 应用程序带有几个 API 端点:

/api1
/api2

烧瓶(flask_app.py):

app = Flask(__name__)
...
@app.route('/api1', methods=['POST'])
def api1():
...
@app.route('/api2', methods=['POST'])
def api2():
...
if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000)

Dockerfile:

...
# Copy application code
COPY flaskapp /app
WORKDIR /app

# Set entrypoint
ENTRYPOINT ["gunicorn", "-b", "0.0.0.0:5000", "flask_app:app"]

docker-compose:

services:

  nginx:
    image: nginx:latest
    container_name: nginx_container
    restart: always
    ports:
      - "80:80"
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf
    depends_on:
      - app

  app:
    build:
      context: .
      dockerfile: Dockerfile
    container_name: flask_container
    restart: always
    ports:
      - "5000:5000"
    volumes:
      - ./flaskapp:/app

nginx.conf:

events { 
    worker_connections 1024; 
}
http {
    client_max_body_size 0;
    server {
        listen 80;
            location / {
                proxy_pass http://flask_container:5000/;
            }
        client_max_body_size 0;
    }
}

我使用

docker-compose up
与 Gunicorn 和 Nginx 一起运行它。一切正常开始。 然后我使用 Postman 在此 url 上发送 POST 请求来测试它:

http://localhost:5000/api1
http://localhost:80/api1

但是Postman每次都会返回500错误。

http://localhost:80/api1
的请求也会将此消息写入 Nginx 控制台:

172.18.0.1 - - [08/Jun/2023:18:26:41 +0000] "POST /api1 HTTP/1.1" 500 265 "-" "PostmanRuntime/7.32.2"

我预计 POST 请求将发送至 Flask API。为什么不行?

docker flask nginx gunicorn
1个回答
0
投票

500错误代码意味着API端在代码执行过程中发生了错误。

为了调试,可以使用Python中的

app.run(debug=True)
logging
库。

© www.soinside.com 2019 - 2024. All rights reserved.