You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Docker-Compose部署的Flask应用中配置Gunicorn

用Gunicorn替代Flask内置服务器部署Docker化Flask应用

要让Gunicorn接管Flask应用的请求处理,你需要修改以下3个文件的配置:

1. 修改Dockerfile

移除原有的ENTRYPOINT ["python"],因为我们要直接调用gunicorn可执行文件,而非通过python命令启动:

FROM python:3.9-slim-buster

RUN apt-get update && apt-get install -y git python3-dev gcc \
    && rm -rf /var/lib/apt/lists/*

COPY requirements.txt .

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

EXPOSE 5000

# 移除原ENTRYPOINT,允许直接指定gunicorn命令

2. 更新docker-compose.yml的web服务命令

将web服务的command替换为gunicorn启动命令,指定监听端口、工作进程数和Flask应用入口:

web:
  build: .
  depends_on:
    waitfordb:
      condition: service_completed_successfully
  ports:
    - 5000:5000
  # 替换原command为gunicorn启动命令
  command: gunicorn -w 4 -b 0.0.0.0:5000 /flask/app/server:app
  
  environment:
    MYSQL_HOST: ${MYSQL_HOST}
    MYSQL_USER: ${MYSQL_USER}
    MYSQL_PASSWORD: ${MYSQL_PASSWORD}
    MYSQL_DB: ${MYSQL_DB}
  volumes:
    - ./:/flask

参数说明:

  • -w 4:启动4个工作进程(可根据EC2实例CPU核心数调整,建议设置为核心数×2+1)
  • -b 0.0.0.0:5000:让Gunicorn监听容器内所有网卡的5000端口,对应docker-compose映射的宿主机5000端口
  • /flask/app/server:app:指定Flask应用位置,其中/flask/app/server是容器内server.py的路径,:app是server.py中定义的Flask实例对象名称

3. Server.py无需修改(可选优化)

你的Server.py代码可以保持不变,gunicorn会直接导入app对象并启动服务,if __name__ == '__main__'分支仅会在直接用python运行时触发,不影响gunicorn启动。若想更清晰,可保留该分支用于本地开发测试。

验证部署

修改完成后,重新构建并启动服务:

docker-compose up --build

访问EC2实例的公网IP:5000即可看到应用响应,此时流量已由Gunicorn处理。

内容的提问来源于stack exchange,提问作者Juan Cruz Alric Cortabarria

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 01:05:21