| 12345678910111213141516171819202122232425262728293031 |
- # 基础镜像:Python 3.11 轻量版
- FROM python:3.11-slim
- # 设置工作目录(容器内)
- WORKDIR /app
- # 复制依赖清单并安装依赖(--no-cache-dir 避免缓存,减小镜像体积)
- COPY requirements.txt .
- RUN pip install --no-cache-dir -r requirements.txt
- # 安装 gunicorn 用于生产环境运行 Flask
- RUN pip install --no-cache-dir gunicorn
- # 复制当前目录所有文件到容器的 /app 目录
- COPY . .
- # 暴露容器端口(仅声明,不实际映射,映射由docker-compose/run命令控制)
- EXPOSE 8888
- # 启动命令:gunicorn运行Flask应用(单行JSON格式,避免多行解析错误)
- # -w 4:Worker数(建议 2*CPU核心+1,根据服务器调整)
- # -b 0.0.0.0:8888:绑定地址和端口(0.0.0.0允许外部访问)
- # --timeout 300:Worker超时时间(解决长任务超时被杀死)
- # --graceful-timeout 300:优雅重启超时
- # --worker-class gevent:异步worker(适合长任务/高并发,减少阻塞)
- # --worker-connections 1000:每个worker最大连接数
- # --access-logfile -:访问日志输出到stdout(Docker可捕获)
- # --error-logfile -:错误日志输出到stdout
- # --log-level info:日志级别,方便排查问题
- # app:app:Flask应用入口(第一个app是app.py文件,第二个app是文件内的Flask实例)
- CMD ["gunicorn", "-w", "1", "-b", "0.0.0.0:8888", "--timeout", "300", "--graceful-timeout", "300", "--worker-class", "gevent", "--worker-connections", "1000", "--access-logfile", "-", "--error-logfile", "-", "--log-level", "info", "app:app"]
|