Networking 从docker容器中访问vagrant/virtual box纯主机网络上的其他计算机

Networking 从docker容器中访问vagrant/virtual box纯主机网络上的其他计算机,networking,docker,vagrant,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'

我有一个使用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上的容器中时,我无法访问db服务器。我认为问题在于vagrant/virtualbox的纯主机专用网络使用127.0.0.x范围内的地址。在主机上,vagrant配置环回接口以处理向网络上的每台机器发送请求。但是在容器中,由于未配置此接口,因此容器将所有127.0.0.x请求视为本地主机的请求,并将它们发送回自身


我可以在流浪者端或docker端设置其他配置来缓解此问题吗?简言之,我希望有一个流浪的环境,在这里,我的应用服务器上的容器可以与db服务器对话。注意,db直接安装在db主机上,而不是在docker容器中运行。此外,这是为了模拟不使用vagrant的生产环境,因此我希望docker的任何更改也能在更正常的网络场景中工作。

默认情况下,VirtualBox专用网络仅为主机,因此一个VM看不到另一个VM。您可以通过使用VirtualBox\uuu intnet设置将其更改为使用VirtualBox内部网络,因此需要类似于
host.vm.network的行“private\u network”,ip:ip,VirtualBox\uu intnet:true

这里有更多的信息


请注意,这是特定于VirtualBox的。如果这也需要与其他提供商合作,我认为您需要使用公共网络,以获得必要的桥接,并考虑所有相关的安全问题。请参阅。

我最终使用了公共网络,但这看起来也是一个有用的替代解决方案。