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

如何让FastAPI应用同时运行在多个端口上?

FastAPI同应用多端口监听解决方案

方案一:修改Python代码实现多端口绑定

原生uvicorn.run()不支持直接传入多端口列表,我们可以通过多线程启动多个Uvicorn服务实例,共用同一个FastAPI应用对象实现需求,代码如下:

from fastapi import FastAPI
import uvicorn
import threading

app = FastAPI()

@app.get("/healthcheck/")
def healthcheck():
    return 'Health - OK'

def run_uvicorn_server(port: int):
    config = uvicorn.Config(
        app=app,
        host="0.0.0.0",
        port=port
    )
    server = uvicorn.Server(config)
    server.run()

if __name__ == "__main__":
    # 可自由调整需要监听的端口列表
    listen_ports = [30000, 8443]
    server_threads = []
    for port in listen_ports:
        thread = threading.Thread(target=run_uvicorn_server, args=(port,))
        thread.start()
        server_threads.append(thread)
    # 阻塞主线程直到所有服务线程退出
    for thread in server_threads:
        thread.join()

该方案下两个端口的请求都会由同一个FastAPI应用处理,完全兼容你现有的业务逻辑,Docker启动命令不需要修改,仍然可以使用CMD ["python3", "app.py"]。


方案二:调整Docker启动命令(无需修改Python代码)

生产环境更推荐使用Gunicorn作为进程管理器配合Uvicorn Worker实现多端口绑定,不需要修改原有Python代码,仅需调整依赖和Dockerfile即可:

  1. 首先在项目依赖文件(如requirements.txt)中新增gunicorn依赖:
    fastapi
    uvicorn
    gunicorn
    
  2. 修改Dockerfile的CMD指令:
    # 原有构建步骤保持不变
    CMD ["gunicorn", "-k", "uvicorn.workers.UvicornWorker", "-w", "1", "--bind", "0.0.0.0:30000", "--bind", "0.0.0.0:8443", "app:app"]
    

参数说明:

  • -w 1:指定工作进程数为1,可根据实际需求调整为更大值
  • 多个--bind参数分别绑定需要监听的端口
  • 末尾app:app对应你的Python入口文件名(app.py)和FastAPI实例变量名(app)

内容的提问来源于stack exchange,提问作者Anirban Saha

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 00:15:07