使用NFS和private_network时,将Vagrant VM暴露给网络

时间:2014-10-21 17:33:55

标签: ruby vagrant

我有一台多机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中运行的应用程序。这可能吗?

1 个答案:

答案 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