在Vagrant中访问端口5000时遇到问题

时间:2014-04-22 21:31:22

标签: python networking flask vagrant vagrantfile

我想在一个流浪汉的环境中自学Flask。据我所知,Flask默认在端口5000上运行服务器。在我的Vagrantfile中,我有:

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

我有一个简单的教程Flask app:

from flask import Flask 
app = Flask(__name__)

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

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

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

我对网络知之甚少。我错过了什么?

6 个答案:

答案 0 :(得分:16)

如果您从桌面上的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')

答案 1 :(得分:11)

您可能需要让Flask在外部可见网址上投放:请参阅the docs

答案 2 :(得分:2)

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

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

e.g。在主持人

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
  

注意:GUEST_IP最有可能出现在10.0.2.0/24网络中(默认为vbox NAT引擎)。

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

确保您的python hello world不仅仅绑定到环回设备,以便它可以处理来自外部客户端的请求。

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

答案 3 :(得分:1)

你的流浪盒里装有卷发吗?如果没有安装它并尝试curl http://127.0.0.1:5000/hello。如果你收到回复并且在控制台中看到Hello world!,那么在烧瓶方面一切都很好。返回虚拟框 - 当您打开网络设置时,根据您的说法,我假设您使用的是NAT地址。在这种情况下,您需要将主机地址设置为127.0.0.1,端口5000,将访客地址留空并再次输入端口5000,这应该是技巧(端口转发)。在这些情况下,我注意到有关流浪者的一件事是,如果你使用虚拟主机,它最有效。看看here

答案 4 :(得分:0)

确保' vagrant reload'更改Vagrantfile后

答案 5 :(得分:0)

我正在使用Vagrant并通过将这行代码添加到Vagrantfile来解决它:

  config.vm.network "forwarded_port", guest: 5000, host: 5000, host_ip: "127.0.0.1"