在docker容器中访问vagrant / virtual box上的其他计算机仅托管网络

时间:2015-03-12 22:52:23

标签: networking docker vagrant

我有一个使用vagrant设置的实验室环境。它由3台机器,两台安装了docker 1.4.1的应用服务器和一台安装了postgres 9.3的数据库服务器组成。所有机器都运行Centos 6.6。

使用仅限主机的专用网络设置环境。这是流浪文件

Vagrant.configure('2') do |config|
  config.vm.box = "centos-6.0-updated"

  {
    'db'    => '10.17.33.10',
    'app1'   => '10.17.33.11',
    'app2' => '10.17.33.12',
  }.each do |short_name, ip|
    config.vm.define short_name do |host|
      host.vm.network 'private_network', ip: ip
      host.vm.hostname = "#{short_name}.my.dev"
    end
  end
end

我发现当我在app1或app2上的容器内部时,我无法访问数据库服务器。我认为问题是vagrant / virtualbox的主机专用网络使用127.0.0.x范围内的地址。在主机上,vagrant配置环回接口以处理向网络上的每台机器发送请求。但是在容器中,由于未配置此接口,容器会将所有127.0.0.x请求视为对localhost的请求,并将它们发送回自身。

我是否可以在流浪者方面设置替代配置,或者解决此问题的泊坞方?简而言之,我希望有一个流浪的环境,我的应用服务器上的容器可以与数据库服务器通信。请注意,db直接安装在db-host上,而不是在docker容器中运行。此外,这是为了模仿不使用vagrant的生产环境,因此我也希望任何docker更改能够在更正常的网络方案中工作。

1 个答案:

答案 0 :(得分:7)

默认情况下,VirtualBox专用网络仅限主机,因此一个VM无法看到另一个VM。您可以通过使用virtualbox__intnet设置将此更改为使用VirtualBox内部网络,因此您需要一行host.vm.network "private_network", ip: ip, virtualbox__intnet: true

这里有更多信息http://docs.vagrantup.com/v2/virtualbox/networking.html

请注意,这是特定于VirtualBox的。如果这也需要与不同的提供商合作,我认为您将需要使用公共网络以获得必要的桥接并考虑到确保这一点的所有相关问题。请参阅http://docs.vagrantup.com/v2/networking/public_network.html