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

解决FastAPI本地跨应用调用时的Connection refused错误

问题分析与解决方案

1. 端口号不匹配(最直接原因)

你启动应用A时指定的端口是8081(启动命令:uvicorn A:api --reload --port 8081),但调用应用B时传入的回调URL却是http://127.0.0.1:8001/write——端口号写成了8001,和实际运行的A端口不符,直接导致连接被拒绝。

解决方法:将回调URL修改为http://127.0.0.1:8081/write,确保端口与A的启动端口完全一致。

2. 检查应用A的绑定地址

默认情况下,uvicorn会绑定127.0.0.1(仅本地回环可访问),如果是本地直接运行两个应用,这个配置没问题;但如果是在容器(如Docker)环境中运行,127.0.0.1是容器内部的回环地址,无法访问宿主机器上的应用A。

  • 本地运行:确认A启动时未指定其他绑定地址(默认即可);
  • 容器环境:启动A时需指定绑定0.0.0.0(命令:uvicorn A:api --reload --port 8081 --host 0.0.0.0),同时回调URL改为宿主机器的IP(而非127.0.0.1)。

3. 为后台任务添加异常处理

当前应用B的process函数没有异常捕获逻辑,即使连接失败也无法输出明确的错误信息,不利于排查问题。建议补充异常处理:

def process(callback: str):
    req_body = {"name": "name", "result": "result"}
    try:
        response = requests.post(url=callback, json=req_body)
        response.raise_for_status()  # 主动抛出HTTP状态码错误
        print(f"回调成功,响应状态码:{response.status_code}")
    except requests.exceptions.RequestException as e:
        print(f"回调失败详情:{str(e)}")

4. 手动验证网络连通性

在运行应用B的终端中,执行curl命令测试能否直接访问应用A:

curl -X POST http://127.0.0.1:8081/write -H "Content-Type: application/json" -d '{"name":"test","result":"test"}'
  • 如果curl命令能返回{"status": "OK"},说明网络连通性正常,问题出在B的代码逻辑或传入的回调URL;
  • 如果curl命令也报错,检查应用A是否正常运行、端口是否被其他进程占用。

内容的提问来源于stack exchange,提问作者D3-one 6

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 08:03:11