FastAPI/uvicorn not working when specifying host

17,244

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.

Share:
17,244
Jed
Author by

Jed

About Me I'm an Associate Director of Data Science with a strong background in industrial businesses. I worked in manufacturing for ~10 years, then transitioned to work on Advanced Analytics, Machine Learning, Data Science projects in the industrial & supply-chain spaces as well.

Updated on June 11, 2022

Comments

  • Jed
    Jed almost 2 years

    I'm running a FastAPI app in Python using uvicorn on a Windows machine. It works fine when I either

    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'?