
tiangolo/uvicorn-gunicorn此Docker镜像现已弃用。您无需再使用此镜像,直接使用Uvicorn并添加--workers参数即可实现相同功能。详情请参见下文。
python3.11, latest (Dockerfile)python3.10, (Dockerfile)python3.9, (Dockerfile)python3.11-slim (Dockerfile)python3.10-slim (Dockerfile)python3.9-slim (Dockerfile)⚠️ 以下标签不再受支持或维护,已从GitHub仓库中移除,但Docker Hub可能仍保留最后推送的版本:
python3.9-alpine3.14python3.8python3.8-slimpython3.8-alpine3.10python3.7python3.7-alpine3.8python3.6python3.6-alpine3.8这些版本的最后日期标签:
python3.9-alpine3.14-2024-03-11python3.8-2024-11-02python3.8-slim-2024-11-02python3.8-alpine3.10-2024-03-11python3.7-2024-11-02python3.7-alpine3.8-2024-03-11python3.6-2022-11-25python3.6-alpine3.8-2022-11-25注意:存在按构建日期命名的标签。若需固定镜像版本,可选择此类标签,例如
tiangolo/uvicorn-gunicorn:python3.11-2024-11-02。
uvicorn-gunicorn是一个Docker镜像,包含Uvicorn(基于ASGI规范的Python异步Web服务器)和Gunicorn(进程管理器),用于高性能Python Web应用,并具备自动性能调优能力。
原设计目标是通过自动调整工作进程数量(基于可用CPU核心数),简化部署流程,使开发者只需添加应用代码即可获得高性能。
slim变体。原适用场景:
适用于简单部署环境,需要快速启动高性能ASGI应用(如FastAPI、Starlette),无需手动配置进程管理。
当前建议:
此镜像已弃用,现代部署应优先考虑以下方案:
直接使用Uvicorn:通过--workers参数手动指定工作进程数,例如:
bashuvicorn app.main:app --host 0.0.0.0 --port 80 --workers 4
集群环境(Kubernetes/Docker Swarm等):在集群中,应通过集群级别的副本管理(而非容器内进程管理器)实现扩展,此时建议构建基础镜像并运行单Uvicorn进程,例如:
DockerfileFROM python:3.11 WORKDIR /code COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt COPY ./app /code/app CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "80"]
以Python 3.11为例,构建自定义应用镜像:
DockerfileFROM tiangolo/uvicorn-gunicorn:python3.11 # 复制依赖文件并安装 COPY ./requirements.txt /app/requirements.txt RUN pip install --no-cache-dir --upgrade -r /app/requirements.txt # 复制应用代码 COPY ./app /app
应用结构要求:默认加载
/app/app/main.py或/app/main.py中的app变量(ASGI应用实例)。
bash# 构建镜像 docker build -t my-asgi-app ./ # 运行容器 docker run -d --name my-app -p 80:80 my-asgi-app
可通过环境变量自定义行为,以下为关键参数及默认值:
| 变量名 | 描述 | 默认值 |
|---|---|---|
MODULE_NAME | 应用模块路径 | app.main(若/app/app/main.py存在)或main(若/app/main.py存在) |
VARIABLE_NAME | ASGI应用实例变量名 | app |
APP_MODULE | 完整应用路径(MODULE_NAME:VARIABLE_NAME) | 自动推导(如app.main:app) |
WORKERS_PER_CORE | 每个CPU核心的工作进程数(支持浮点) | 1(单核心时默认2个进程) |
MAX_WORKERS | 最大工作进程数限制 | 无限制 |
WEB_CONCURRENCY | 覆盖自动计算的工作进程数 | 自动计算(WORKERS_PER_CORE * CPU核心数) |
PORT | 容器监听端口 | 80 |
LOG_LEVEL | 日志级别(debug/info/warning/error/critical) | info |
GUNICORN_CMD_ARGS | Gunicorn额外命令行参数(优先级最高) | 无 |
bash# 限制最大工作进程为4,每个核心0.5个进程 docker run -d -p 80:80 -e MAX_WORKERS=4 -e WORKERS_PER_CORE=0.5 my-asgi-app
创建gunicorn_conf.py并挂载到容器,覆盖默认配置:
bashdocker run -d -p 80:80 -e GUNICORN_CONF="/app/custom_gunicorn_conf.py" -v $(pwd)/custom_gunicorn_conf.py:/app/custom_gunicorn_conf.py my-asgi-app
添加/app/prestart.sh执行启动前任务(如数据库迁移):
bash#!/usr/bin/env bash # 等待数据库启动 sleep 10 # 执行Alembic迁移 alembic upgrade head
赋予执行权限并构建镜像,容器会自动执行此脚本。
使用/start-reload.sh启动开发模式(单Uvicorn进程,代码变更自动重启):
bashdocker run -d -p 80:80 -v $(pwd)/app:/app/app my-asgi-app /start-reload.sh
不建议使用Alpine标签(如python3.9-alpine3.14),原因:
slim标签(基于Debian),兼顾体积与兼容性。原镜像通过Gunicorn作为进程管理器,运行Uvicorn工作进程(uvicorn.workers.UvicornWorker)。随着Uvicorn原生支持--workers参数(管理子进程及重启),Gunicorn的进程管理功能已冗余,因此镜像被弃用。
原镜像设计为以下框架的基础镜像:
当前建议直接基于Python官方镜像构建,无需依赖此类基础镜像。






manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务