本站支持搜索的镜像仓库:Docker Hub、gcr.io、ghcr.io、quay.io、k8s.gcr.io、registry.gcr.io、elastic.co、mcr.microsoft.com

uwsgi-nginx-flask是一个集成uWSGI和Nginx的Docker镜像,专为在单个容器中运行Python Flask Web应用设计。该镜像预配置了生产环境常用的部署组件,将Flask应用服务器(uWSGI)与反向代理服务器(Nginx)结合,简化了Flask应用的部署流程,适用于需要快速搭建稳定Web服务的场景。
| 标签 | Dockerfile链接 |
|---|---|
python3.12, latest | Dockerfile |
python3.11 | Dockerfile |
python3.10 | Dockerfile |
python3.9 | Dockerfile |
⚠️ 以下标签不再维护,已从GitHub仓库移除,但Docker Hub可能仍保留最后推送版本:
python3.8python3.8-alpinepython3.7python3.6python2.7这些版本的最后日期标签:
python3.8-2024-10-28python3.8-alpine-2024-03-11python3.7-2024-10-28python3.6-2022-11-25python2.7-2022-11-25注意:镜像提供每日构建标签,如需固定版本可选择日期标签(如
tiangolo/uwsgi-nginx-flask:python3.7-2019-10-14)。
简单Flask应用部署
无需复杂集群管理,单容器即可满足中小流量应用需求,适合个人项目或内部工具。
Docker Compose单服务器部署
在单台服务器上使用Docker Compose管理服务时,可利用容器内进程管理实现负载均衡,避免集群级工具(如Kubernetes)的复杂性。
单容器多进程指标收集
需在容器内汇总多工作进程指标(如Prometheus监控)时,单容器部署可简化指标采集逻辑。
⚠️ Kubernetes或集群环境:在集群环境中,建议通过集群工具(如Kubernetes)管理容器复制和负载均衡,而非依赖容器内进程管理。此时应构建仅包含单个应用进程的镜像(如使用Gunicorn),通过集群调度实现水平扩展。
项目结构
. ├── app │ └── main.py └── Dockerfile
编写Flask应用(app/main.py)
from flask import Flask app = Flask(__name__) @app.route("/") def hello(): return "Hello World from Flask" if __name__ == "__main__": app.run(host='0.0.0.0', debug=True, port=80) # 仅用于开发调试
编写Dockerfile
FROM tiangolo/uwsgi-nginx-flask:python3.12 # 复制应用代码 COPY ./app /app
构建并运行镜像
# 构建镜像 docker build -t my-flask-app . # 运行容器 docker run -d --name my-flask-container -p 80:80 my-flask-app
访问应用
打开浏览器访问 [***] 或服务器IP,应显示"Hello World from Flask"。
对于结构化Python包项目,需调整目录结构并配置uWSGI:
项目结构
. ├── app │ ├── app │ │ ├── __init__.py │ │ ├── main.py │ │ └── static # 静态文件目录 │ └── uwsgi.ini # uWSGI配置文件 └── Dockerfile
配置uWSGI(app/uwsgi.ini)
[uwsgi] module = app.main # 模块路径:app/main.py callable = app # Flask应用实例名称
Dockerfile配置
FROM tiangolo/uwsgi-nginx-flask:python3.12 # 配置静态文件路径(如需要) ENV STATIC_PATH /app/app/static # 复制应用代码 COPY ./app /app
不建议将前端代码与Flask后端打包在同一容器中。推荐采用多阶段构建分离前后端:
| 环境变量 | 默认值 | 说明 |
|---|---|---|
UWSGI_CHEAPER | 2 | 初始工作进程数 |
UWSGI_PROCESSES | 16 | 最大工作进程数(需大于UWSGI_CHEAPER) |
UWSGI_INI | /app/uwsgi.ini | uWSGI配置文件路径 |
UWSGI_THREADS | 1 | 每个工作进程的线程数 |
| 环境变量 | 默认值 | 说明 |
|---|---|---|
LISTEN_PORT | 80 | 容器监听端口 |
NGINX_MAX_UPLOAD | 0 | 最大上传文件大小(0表示无限制,单位:m=兆字节,g=千兆字节) |
NGINX_WORKER_PROCESSES | 1 | Nginx工作进程数(设为auto可自动检测CPU核心数) |
NGINX_WORKER_CONNECTIONS | 1024 | 每个工作进程的最大连接数 |
NGINX_WORKER_OPEN_FILES | 1024 | 每个工作进程的最大打开文件数(需大于NGINX_WORKER_CONNECTIONS) |
| 环境变量 | 默认值 | 说明 |
|---|---|---|
STATIC_PATH | /app/static | Nginx静态文件目录路径 |
STATIC_URL | /static | 静态文件访问URL前缀 |
STATIC_INDEX | 0 | 是否将/static/index.html作为根路径响应(1=启用,0=禁用,不推荐SPA使用) |
通过替换uwsgi.ini文件自定义uWSGI行为:
创建自定义uwsgi.ini(如启用线程支持)
[uwsgi] module = main callable = app enable-threads = true # 启用线程 thread-stacksize = 128k # 线程栈大小
Dockerfile中复制配置文件
FROM tiangolo/uwsgi-nginx-flask:python3.12 # 复制自定义uwsgi.ini COPY ./uwsgi.ini /app/uwsgi.ini # 复制应用代码 COPY ./app /app
添加*.conf文件到/etc/nginx/conf.d/目录扩展配置(不覆盖默认配置):
FROM tiangolo/uwsgi-nginx-flask:python3.12 # 添加自定义Nginx配置 COPY ./custom-nginx.conf /etc/nginx/conf.d/custom.conf COPY ./app /app
通过/app/nginx.conf完全替换Nginx配置:
FROM tiangolo/uwsgi-nginx-flask:python3.12 # 复制自定义Nginx配置(完全覆盖默认配置) COPY ./nginx.conf /app/nginx.conf COPY ./app /app
创建/app/prestart.sh可在应用启动前执行命令(如数据库迁移):
创建脚本(app/prestart.sh)
#! /usr/bin/env bash # 示例:等待数据库启动 sleep 10 # 示例:执行数据库迁移 flask db upgrade
添加执行权限并复制
FROM tiangolo/uwsgi-nginx-flask:python3.12 # 复制前置脚本并添加权限 COPY ./app/prestart.sh /app/prestart.sh RUN chmod +x /app/prestart.sh COPY ./app /app
version: '3' services: flask-app: build: . ports: - "80:80" environment: - UWSGI_CHEAPER=4 # 初始工作进程数4 - UWSGI_PROCESSES=16 # 最大工作进程数16 - NGINX_MAX_UPLOAD=10m # 最大上传10MB - STATIC_PATH=/app/app/static # 静态文件路径 volumes: - ./app:/app # 开发环境热更新(生产环境移除) restart: always
修改容器监听端口:
FROM tiangolo/uwsgi-nginx-flask:python3.12 # 配置监听端口 ENV LISTEN_PORT 8080 EXPOSE 8080 # 声明暴露端口 COPY ./app /app
运行命令:
docker run -d --name my-flask-container -p 8080:8080 my-flask-app
该镜像基于tiangolo/uwsgi-nginx构建,默认配置:
/app/uwsgi.ini加载应用,默认模块为main,可调用对象为app127.0.0.1:3031)所有配置文件和脚本在容器启动时动态生成,确保环境变量生效。
免费版仅支持 Docker Hub 加速,不承诺可用性和速度;专业版支持更多镜像源,保证可用性和稳定速度,提供优先客服响应。
免费版仅支持 docker.io;专业版支持 docker.io、gcr.io、ghcr.io、registry.k8s.io、nvcr.io、quay.io、mcr.microsoft.com、docker.elastic.co 等。
当返回 402 Payment Required 错误时,表示流量已耗尽,需要充值流量包以恢复服务。
通常由 Docker 版本过低导致,需要升级到 20.x 或更高版本以支持 V2 协议。
先检查 Docker 版本,版本过低则升级;版本正常则验证镜像信息是否正确。
使用 docker tag 命令为镜像打上新标签,去掉域名前缀,使镜像名称更简洁。
探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录方式配置轩辕镜像加速服务,包含7个详细步骤
在 Linux 系统上配置轩辕镜像源,支持主流发行版
在 Docker Desktop 中配置轩辕镜像加速,适用于桌面系统
在 Docker Compose 中使用轩辕镜像加速,支持容器编排
在 k8s 中配置 containerd 使用轩辕镜像加速
在宝塔面板中配置轩辕镜像加速,提升服务器管理效率
在 Synology 群晖NAS系统中配置轩辕镜像加速
在飞牛fnOS系统中配置轩辕镜像加速
在极空间NAS中配置轩辕镜像加速
在爱快ikuai系统中配置轩辕镜像加速
在绿联NAS系统中配置轩辕镜像加速
在威联通NAS系统中配置轩辕镜像加速
在 Podman 中配置轩辕镜像加速,支持多系统
配置轩辕镜像加速9大主流镜像仓库,包含详细配置步骤
无需登录即可使用轩辕镜像加速服务,更加便捷高效
需要其他帮助?请查看我们的 常见问题 或 官方QQ群: 13763429