Question
I'm not sure if this is Flask specific, but when I run an app in dev mode
(http://localhost:5000
), I cannot access it from other machines on the
network (with http://[dev-host-ip]:5000
). With Rails in dev mode, for
example, it works fine. I couldn't find any docs regarding the Flask dev
server configuration. Any idea what should be configured to enable this?
Answer
While this is possible, you should not use the Flask dev server in production. The Flask dev server is not designed to be particularly secure, stable, or efficient. See the docs on deploying for correct solutions.
The --host
option to flask run
, or the host
parameter to app.run()
,
controls what address the development server listens to. By default it runs on
localhost
, change it to flask run --host=0.0.0.0
(or
app.run(host="0.0.0.0")
) to run on all your machine's IP addresses.
0.0.0.0
is a special value that you can't use in the browser directly,
you'll need to navigate to the actual IP address of the machine on the
network. You may also need to adjust your firewall to allow external access to
the port.
The Flask quickstart docs explain this in the "Externally Visible Server" section:
If you run the server you will notice that the server is only accessible from your own computer, not from any other in the network. This is the default because in debugging mode a user of the application can execute arbitrary Python code on your computer.
If you have the debugger disabled or trust the users on your network, you can make the server publicly available simply by adding
--host=0.0.0.0
to the command line:$ flask run --host=0.0.0.0
This tells your operating system to listen on all public IPs.