在系统内部,在虚拟机上运行,我可以访问正在运行的服务器127.0.0.1:5000
。
尽管虚拟机的“远程”地址是 192.168.56.101(ping 和 ssh 工作正常),但我无法从虚拟机或本地服务器访问 192.168.50.101:5000 的服务器。
我猜想有一些东西阻止了远程连接。
这是 /etc/network/interfaces:
auto eth1
iface eth1 inet static
address 192.168.56.101
netmask 255.255.255.0
ufw 处于非活动状态。
我该如何解决这个问题?
答案1
首先, 通过检查输出确保您的 HTTP 服务器正在监听192.168.50.101:5000
或任何地方( ):0.0.0.0:5000
netstat -tupln | grep ':5000'
如果不是,请咨询Flask 的文档绑定到本地主机以外的地址。
如果是,则使用 iptables 允许流量:
iptables -I INPUT -p tcp --dport 5000 -j ACCEPT
来自Flask的文档:
外部可见服务器 如果您运行服务器,您会注意到服务器只能从您自己的计算机访问,而不能从网络中的任何其他计算机访问。这是默认设置,因为在调试模式下,应用程序的用户可以在您的计算机上执行任意 Python 代码。
如果您已禁用调试或信任网络上的用户,则可以通过简单地将方法调用更改
run()
为如下所示的方式使服务器公开可用:app.run(host='0.0.0.0')
答案2
最好的方法
flask run --host=0.0.0.0
答案3
我刚刚遇到了同样的问题。为了解决这个问题,我更新了运行应用程序的方式:
app.run(debug=True,host='0.0.0.0')
使用 host=0.0.0.0 让我通过本地网络访问我的应用程序。
要访问你的 flask 应用程序,你需要做的就是在浏览器中输入:
[your devices ip address]:5000
IE:
192.168.1.255:5000