2015-04-02 65 views
0

我正在尝试在我的家庭网络上使用vagrant进行分布式项目。这是我使用的每个主机上Vagrantfile(共3台):流浪公网无法访问?

# -*- mode: ruby -*- 
# # vi: set ft=ruby : 

# Specify minimum Vagrant version and Vagrant API version 
Vagrant.require_version ">= 1.6.0" 
VAGRANTFILE_API_VERSION = "2" 

# Require YAML module 
require 'yaml' 

# Read YAML file with box details 
servers = YAML.load_file('RaftFS/servers.yaml') 

# Create boxes 
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| 
# Create servers 
    # Iterate through entries in YAML file 
    servers.each do |key,value| 
    #the line below will be different on each machine 
    if key == "hal9000" 
     config.vm.define key do |srv| 
      srv.vm.box = value['box'] 
       #srv.vm.network "private_network", ip: value['ip'] 
      srv.vm.network :public_network, ip:value['ip'] 
      srv.vm.hostname=key 
      srv.vm.synced_folder ".", "/vagrant" , disabled:true 
      srv.vm.synced_folder "ServersFS/"+key+"/", "/vagrant/ServersFS" , create: true 
      srv.vm.synced_folder "./RaftFS", "/vagrant/RaftFS" 
      srv.vm.provision :shell do |shell| 
       shell.path = "provision.sh" 
       shell.args = "'TRUE'" 
      end 
      srv.vm.provider :virtualbox do |vb| 
       vb.name = key 
       vb.memory = value['ram'] 
       end 
     end 
    end 
    end 
end 

这是servers.yaml:

jarvis: 
    box: hashicorp/precise32 
    ram: 512 
    ip: 192.168.1.200 
    ftpPort: 8080 
    diskSpace: 500 
skynet: 
    box: hashicorp/precise32 
    ram: 512 
    ip: 192.168.1.201 
    ftpPort: 8081 
    diskSpace: 500 
hal9000: 
    box: hashicorp/precise32 
    ram: 512 
    ip: 192.168.1.202 
    ftpPort: 8083 
    diskSpace: 500 

现在,如果我ssh每台机器并运行ifconfig的IP设置正确。问题是,如果我尝试以任何方式联系它,它甚至从同一台主机上无法访问!换句话说,试图从主机的外壳尝试到IP地址ping,来宾机器没有响应。

+0

主机通常表示虚拟机正在运行的主框。因此,如果我有一台装有3台运行Ubuntu的Windows 7笔记本电脑,那么我会说我拥有一台装有3台虚拟机/客户机的Windows7主机,所以我有点不确定你最后一句话的含义。 – ydaetskcoR 2015-04-02 15:24:11

回答

0

它看起来像你只设置hal9000虚拟机使用公共(或桥接)网络(或实际上做任何配置),所以其他客人只使用默认的主机唯一的网络,这应该意味着他们只是有连接到主机而不是彼此。

如果取出:

if key == "hal9000" 

线,那么它应该正确配置的东西。

但是,除非您真的希望机器面向这些虚拟机,否则这些虚拟机应该全部位于专用网络中,通过取消注释您已有的专用网络线路来实现这一功能。

+0

如果我将网络设置为私有网络,则它只能由本地主机从网络的其余部分无法ping(因此我推断可见)。然而,看起来关于私人网络和公共网络的流浪部分存在很多混淆,我认为答案并不是唯一的 – justHelloWorld 2015-04-03 16:48:39