我已经配置了一个多机 Vagrant 文件,其中两台虚拟机充当迷你故障转移主动-被动集群。
由于正在运行的服务相同且在同一个端口上运行,Vagrant 不允许我在主机上两次转发同一个端口,因此我无法访问它们,Vagrant 也无法成功运行第二个 VM。
我尝试通过将虚拟机放在我的真实网络上来绕过端口转发public_network
(这有点像--net=host
在 docker 中?),但这并不能解决问题。
答案1
正确的做法是:
在物理网络上设置虚拟机并为其提供静态 IP,然后设置网络掩码以及:
config.vm.define "vm1" do |vm1| vm1.vm.hostname = "vm1" vm1.vm.network "public_network", ip: "192.168.x.y", bridge: "wlan0", netmask: "255.255.255.0" end config.vm.define "vm2" do |vm2| vm2.vm.hostname = "vm2" vm2.vm.network "public_network", ip: "192.168.x.y", bridge: "wlan0", netmask: "255.255.255.0" end
这样,虚拟机就作为物理服务器出现在我的网络上,不需要端口转发(就像在带有--net=host
参数的docker中一样)。
起初,我的服务只能从运行 Vagrant 的主机访问,直到我发现我需要提供网络掩码选项也是如此,然后,接下来vagrant reload
我本地网络中的所有其他设备现在也可以访问这些服务了。
我已经通过这个解决方案线。
我认为官方 Vagrant 文档应该更新以包含该选项,因为我最初在那里找不到它,而且它很重要。