多个Vagrant虚拟机可以通过VM主机名进行通信吗?

时间:2013-12-19 11:57:09

标签: networking vagrant

我正在使用Vagrant管理多个虚拟机。网络配置为私有,已设置IP地址并分配主机名。如下面的Vagrantfile所示。

虚拟机可以通过IP地址相互通信,但我想知道如何允许虚拟机使用其分配的主机名进行通信。即如何使ping comtest2工作comtest1

Vagrantfile:

Vagrant.configure("2") do |config|

  config.vm.define "comtest1" do |comtest1|
    comtest1.vm.box = "precise32"
    comtest1.vm.hostname = "comtest1"
    comtest1.vm.network "private_network", ip: "192.168.10.21"
  end

  config.vm.define "comtest2" do |comtest2|
    comtest2.vm.box = "precise32"
    comtest2.vm.hostname = "comtest2"
    comtest2.vm.network "private_network", ip: "192.168.10.22"
  end

end

5 个答案:

答案 0 :(得分:16)

答案 1 :(得分:10)

您可以使用Zeroconf。它在网络中广播主机名,并使其可供本地网络上的其他主机使用。这样您就可以使用test1.local,test2.local等访问您的主机。

只需安装avahi-daemonlibnss-mdns

答案 2 :(得分:3)

这不是世界上最优雅的解决方案,但它非常简单,如下所示:

Vagrant.configure("2") do |config|

  config.vm.define "comtest1" do |comtest1|
    comtest1.vm.box = "precise32"
    comtest1.vm.hostname = "comtest1"
    comtest1.vm.network "private_network", ip: "192.168.10.21"
    comtest1.vm.provision "shell", inline: <<-SHELL
       sed -i '$ a 192.168.10.22 comtest2' /etc/hosts           
    SHELL
  end

  config.vm.define "comtest2" do |comtest2|
    comtest2.vm.box = "precise32"
    comtest2.vm.hostname = "comtest2"
    comtest2.vm.network "private_network", ip: "192.168.10.22"
  end

end

答案 3 :(得分:0)

结帐landrush on Github。 它将为您的流浪专用网络设置DNS。

答案 4 :(得分:0)

如果主机可以正确解析DNS,则可以将Virtualbox配置为将主机用作DNS解析器。

config.vm.provider :virtualbox do |vb|
  vb.customize ["modifyvm", :id, "--natdnshostresolver1", "on"]
end

请参见https://serverfault.com/a/506206/250071


我们使用本地Ansible任务将预配置框自动添加到主机/etc/hosts文件中。有点尴尬,但功能非常强大。

- setup:
  gather_subset: [network]
- name: Add host mapping to local /etc/hosts
  delegate_to: 127.0.0.1
  lineinfile: dest=/etc/hosts regexp=".+{{ vm.hostname }}$" line="{{ ansible_all_ipv4_addresses|sort|last }} {{ vm.hostname }}"