如何从主机浏览器访问vagrant中运行的python?

时间:2015-10-22 13:09:29

标签: python vagrant

我在Windows中安装了Vagrant,现在我有一个虚拟的ubuntu,我运行了一个python脚本:

vagrant@precise32:/vagrant/FlaskMysql/FlaskApp$ ls
app.py  static  storedPro.txt  templates
vagrant@precise32:/vagrant/FlaskMysql/FlaskApp$ python app.py
* Running on http://127.0.0.1:5002/ (Press CTRL+C to quit)

我的Vagrantefile:

config.vm.box = "hashicorp/precise32"
  config.vm.provision :shell, path: "bootstrap.sh"
  config.vm.network :forwarded_port, guest: 80, host: 4567
  config.vm.network :forwarded_port, guest: 5002, host: 5002

我尝试在我的窗口中从浏览器访问上述地址,index.html页面会在几秒钟后出现,然后消失。

更新:

vagrant@precise32:/vagrant/FlaskMysql/FlaskApp$ curl http://127.0.0.1:5000
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<title>500 Internal Server Error</title>
<h1>Internal Server Error</h1>
<p>The server encountered an internal error and was unable to complete your   request.  Either the server is overloaded or
there is an error in the application.</p>

感谢。

3 个答案:

答案 0 :(得分:2)

除转发端口外,您还需要运行带有主机"0.0.0.0"的Flask应用:

app.run(host='0.0.0.0', port=5002)

这使得dev服务器在外部可见;在Vagrant的情况下,我们希望应用程序在外部可见(从客户操作系统到主机操作系统)。

答案 1 :(得分:0)

感谢chucksmash的回答,这是我的解决方案版本:

我从 Python App 中更改了主机和端口:

run(host='localhost', port=8080, debug=True)

对此:

run(host='0.0.0.0', port=5002, debug=True)

,并在 vagrantfile 中通过以下操作:

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

对此:

config.vm.network "forwarded_port", guest: 5002, host: 5002

然后测试请求,并不要忘记添加资源(URL端点)在我的示例中为“ hello”:http://0.0.0.0:5002/hello

这为我解决了这个问题。

答案 2 :(得分:0)

如果有人仍然面临连接主机上的flask URL的问题,我想在Chucksmash的答案中添加更多内容。尝试以下选项之一(两者都应起作用):

流浪文件:

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

app.py:

from flask import Flask

app = Flask(__name__)


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


if __name__ == "__main__":
    app.run()

方法1。。在app.run()中配置主机和端口,并使用python运行Flash应用。

if __name__ == "__main__":
    app.run(host="0.0.0.0", port=5000)

运行烧瓶应用程序:

$ python3 app.py

方法2。hostport作为参数传递给flask run

export FLASK_APP=app.py
flask run --host "0.0.0.0" --port 5000

您可以通过在终端上运行以下命令来验证其是否有效:

curl http://127.0.0.1:5000

输出Hello world!