访问Vagran中的端口5000时出现问题

2024-04-25 01:59:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我想在流浪的环境中自学烧瓶。我知道Flask默认在端口5000上运行服务器。在我的流浪者档案里有:

config.vm.network :forwarded_port, guest: 80, host: 8080
config.vm.network :forwarded_port, guest: 5000, host: 5000

我有一个简单的教程烧瓶应用程序:

from flask import Flask 
app = Flask(__name__)

@app.route('/hello')
def hello_world():
    return 'Hello world!'

if __name__ == '__main__':
    app.run(debug=True)

然而,当我在我的流浪环境中运行python hello.py,然后转到桌面上Chrome中的127.0.0.1:5000/hello时,我无法连接。

我对网络的了解还不够。我错过了什么?


Tags: nameconfigapphostflaskhelloworld环境
3条回答

这可能是由于Vagrant(VirtualBox)NAT端口转发工作不正常(端口冲突)造成的。

为了缩小问题的范围,您可能需要确保端口5000在两端都正确打开,这可以通过使用nmap、nc(netcat)或netstat等来完成

例如,在主机上

nmap 127.0.0.1

nc -vz 127.0.0.1 5000

curl http://127.0.0.1:5000

在客人内部

nmap GUEST_IP

nc -vz GUEST_IP 5000

curl http://GUEST_IP:5000

NOTE: GUEST_IP is most likely in the 10.0.2.0/24 network (vbox NAT engine default).

在主机和VM(来宾框)中运行这些命令将告诉您端口是否打开。

确保python hello world不仅绑定到环回设备,以便它可以服务外部客户机的请求。

使用lsof -i :5000netstat -nap | grep :5000确定哪个程序正在绑定端口以进行进一步的故障排除。

如果您是从桌面上的Chrome访问,那么从技术上讲,您是从另一台计算机访问的(因此您需要将host='0.0.0.0'作为app.run()的参数,以告诉来宾操作系统接受来自所有公共(外部)ip的连接。

这就是我的工作原理(对于Chrome中的127.0.0.1:5000/hellolocalhost:5000/hello):

from flask import Flask
app = Flask(__name__)

@app.route("/hello")
def hello():
    return "Hello World!"

if __name__ == "__main__":
    app.run(host='0.0.0.0')

您可能需要让Flask在外部可见的URL上提供服务:请参见the docs

相关问题 更多 >