注:该问题只出现在 Windows 系统中,Mac OSX 系统不会出现该问题。
问题描述:Vagrant 中的 web 服务,无法端口转发到主机
比如 Django 的 runserver
$ python manage.py runserver
或者 jupyter notebook
$ jupyter notebook
在 Windows 系统中的 vagrant 虚拟机中,针对 127.0.0.1 的 web 服务,在主机中是无法接收的。
解决方法:虚拟机中 web 服务设置为 0.0.0.0
对于 Django 的 runserver,在虚拟机中设置为 0.0.0.0:8080
,在主机中浏览器中输入 http://127.0.0.1:8080
,就可以用浏览器使用虚拟机中的 django web 服务。
$ python manage.py runserver 0.0.0.0:8080
而对于 jupyter notebook ,需要加上参数--ip=0.0.0.0
。Jupyter 会把服务设置在 8888 或者 8889 端口,如果这两个端口已经在 vagrant 中设置为虚拟机转发到主机,则可以使用 http://127.0.0.1:8888
进行接收。
$ jupyter notebook --ip=0.0.0.0
Vagrantfile 的端口转发设置
设置虚拟机 8888 和 8889 转发到主机对应的端口。可以在 Vagrantfile 中设置。
config.vm.network "forwarded_port", host_ip: "127.0.0.1", guest: 8888, host: 8888
config.vm.network "forwarded_port", host_ip: "127.0.0.1", guest: 8889, host: 8889
参考:
https://gist.github.com/davemkirk/90140b1edde8d18c8b83
http://pythondata.com/jupyter-vagrant/