指定主机时,FastAPI/uvicorn 不起作用

Jed*_*Jed 6 python windows localhost fastapi uvicorn

我在 Windows 机器上使用 uvicorn 在 Python 中运行 FastAPI 应用程序。当我要么

  1. 在我的 mac 上运行以下代码,或者
  2. 当我没有为 uvicorn 指定端口时(host从 uvicorn.run 调用中删除参数)
  3. 当我指定端口“127.0.0.1”时,这是我根本不指定主机时它使用的主机。
from fastapi import FastAPI
import uvicorn

app = FastAPI()


@app.get("/")
async def root():
    return {"message": "Hello World"}


if __name__ == '__main__':
    uvicorn.run(app, port=8080, host='0.0.0.0')
Run Code Online (Sandbox Code Playgroud)

当我在浏览器上转到 0.0.0.0:8080 时,收到一条错误消息,提示“无法访问此站点”。

我已经检查了我当前的活动端口,以确保我没有使用冲突netstat -ao |find /i "listening"并且 0.0.0.0:8080 没有被使用。

我当前的文件配置如下所示:

working_directory
??? app
    ??? gunicorn_conf.py
    ??? main.py
Run Code Online (Sandbox Code Playgroud)

我的 gunicorn_conf.py 非常简单,只是尝试设置主机和端口:

host = "0.0.0.0"
port = "8080"
Run Code Online (Sandbox Code Playgroud)

当我指定主机“0.0.0.0”时,如何使其工作?

小智 15

在终端中运行它uvicorn main:app --port 8086 --reload


Jed*_*Jed 6

当我在写上面的问题时,我找到了解决方案,并认为我会分享以防其他人遇到这个问题。为了让它工作,将“ http://localhost:8080 ”而不是“ http://0.0.0.0:8080 ”放入网络浏览器,它会正常工作。如果您通过 python requests 包等访问端点,这也有效。

  • 这个解决方案也适用于我。但它对我来说仍然有点神奇。为什么使用 localhost 而不是 127.0.0.1 或 0.0.0.0 可以工作? (2认同)