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

无法访问以Windows服务运行的FastAPI应用(基于pywin32创建)

解决FastAPI作为Windows服务启动后无法访问的问题

1. 修改FastAPI监听地址

默认FastAPI仅绑定本地回环地址127.0.0.1,服务运行在系统账户下可能存在访问限制。将监听地址改为0.0.0.0,让应用监听所有网卡:

# main.py中的启动代码
if __name__ == "__main__":
    import uvicorn
    uvicorn.run("main:app", host="0.0.0.0", port=8000, reload=False)

注意:服务模式下禁用reload=True,避免引发服务异常。

2. 修正服务工作目录

Windows服务默认工作目录并非你的项目目录,可能导致应用加载失败。在win_service.py的服务启动方法中添加目录切换代码:

# win_service.py的SvcDoRun方法开头添加
import os
os.chdir("你的项目绝对路径,例如C:\\fastapi_project")

3. 更换服务运行账户

默认Local System账户可能存在网络权限限制,将服务运行账户改为当前管理员账户:

  • 打开「服务」面板,找到你的FastAPI服务
  • 右键→属性→登录选项卡
  • 选择「此账户」,输入管理员用户名和密码,点击确定
  • 重启服务后尝试访问

4. 排查端口与防火墙

  • 管理员CMD执行netstat -ano | findstr :8000,确认8000端口是否被服务进程占用
  • 检查Windows防火墙,添加入站规则允许TCP 8000端口的访问

5. 添加日志定位问题

在win_service.py和main.py中添加日志,排查启动异常:

# win_service.py中添加日志配置
import logging
logging.basicConfig(filename="C:\\logs\\fastapi_service.log", level=logging.INFO, format="%(asctime)s - %(message)s")
logging.info("服务启动中")

# main.py中添加日志
import logging
logging.basicConfig(filename="C:\\logs\\fastapi_app.log", level=logging.INFO)
app = FastAPI()

@app.get("/")
async def root():
    logging.info("收到请求")
    return {"message": "Hello World"}

查看日志文件,确认服务是否正常启动、有无报错信息。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 08:07:03