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

And*_*ick 5 networking vagrant docker

我有一个使用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
Run Code Online (Sandbox Code Playgroud)

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

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

Rua*_*ose 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.