Search code examples
pythonwindowslocalhostfastapiuvicorn

FastAPI/uvicorn not working when specifying host


I'm running a FastAPI app in Python using uvicorn on a Windows machine without a frontend (e.g. Next.js, etc.) so there should NOT be any iteraction between a local frontend and backend like there is in this question. Plus the answer(s) to that question would not have solved my issue/question. That question was also asked AFTER this one so THIS QUESTION IS NOT A DUPLICATE!

It works fine when I do any one of the following options:

  1. Run the following code on my mac, or
  2. When I don't specify the port for uvicorn (remove the host parameter from the uvicorn.run call)
  3. When I specify port '127.0.0.1', which is the host it uses when I don't specify a host at all.
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')

When I go to 0.0.0.0:8080 on my browser, I get an error that says "This site can’t be reached".

I have checked my current active ports to make sure I'm not getting a collision using netstat -ao |find /i "listening" and 0.0.0.0:8080 is not in use.

My current file configuration looks like this:

working_directory
└── app
    ├── gunicorn_conf.py
    └── main.py

My gunicorn_conf.py is super simple and just tries to set the host and port:

host = "0.0.0.0"
port = "8080"

How can I get this to work when I specify host '0.0.0.0'?


Solution

  • As I was writing the question above, I found the solution and thought I would share in case someone else runs into this. To get it to work put "http://localhost:8080" into the web browser instead of "http://0.0.0.0:8080" and it will work fine. This also works if you're hitting the endpoint via the python requests package, etc.