我有一台多机Vagrant设置。使用NFS和private_network
我可以使我需要的一切工作(Drupal,PHP等)除了让大厅里的人访问我的VM上运行的Web应用程序。我知道private_network
使得无法从外部世界连接到虚拟机。
有没有办法创建一个私有和公共网络,以便所有VMS除了负载均衡器是私有的,负载均衡器可以通过主机的IP访问?
hosts = {
"wloadlocal" => "192.168.33.10",
"wweblocal1" => "192.168.33.11",
"wweblocal2" => "192.168.33.12",
"wwhlocal" => "192.168.33.13",
}
Vagrant.configure("2") do |config|
hosts.each do |name, ip|
config.vm.define name do |machine|
machine.vm.box = "precise32"
machine.vm.box_url = "http://files.vagrantup.com/precise32.box"
machine.vm.hostname = "%s.example.org" % name
machine.vm.network :private_network, ip: ip
machine.vm.network "public_network"
machine.vm.provider "virtualbox" do |v|
v.name = name
v.customize ["modifyvm", :id, "--memory", 200]
end
if name == "wloadlocal"
machine.vm.network "forwarded_port", guest: 80, host: 8880
end
end
#sync folders
config.vm.synced_folder "~/data", "/data", type: "nfs"
end
end
编辑#1
在Vagrant的NFS doc page上,它指出当使用VirtualBox和NFS时,你必须使用private_network:
如果您正在使用VirtualBox提供程序,则还需要确保 你有一个私人网络设置。这是由于受到限制 VirtualBox的内置网络。使用VMware,您不需要这个。
出于性能原因,我需要使用NFS,但我也希望能够在需要时通过本地网络共享在VM中运行的应用程序。这可能吗?
答案 0 :(得分:2)
我能找到最简单的方法就是使用其中一条评论中提到的多个网络。所以我的配置最终看起来像这样:
config.vm.define :host01 do |host01|
postgres01.vm.network :private_network, ip: '192.168.37.2'
config.vm.network "public_network"
host01.vm.hostname = 'host01'
configure_vm(host01)
end
然后我做了vagrant ssh host01
来查找最终在我的网络上192.168.0.102
的公共IP。现在我可以从我的主机访问该IP。请注意,使用公共网络功能有一些caveats。