从 docker 容器中访问 vagrant/virtual box host only 网络上的其他机器
Accessing other machines on a vagrant/virtual box host only network from within a docker container
我有一个使用 vagrant 设置的实验室环境。它由3台机器组成,两台安装了docker 1.4.1的应用服务器和一台安装了postgres 9.3的数据库服务器。所有机器都是 运行 Centos 6.6.
环境是使用仅主机专用网络设置的。这是 vagrant 文件
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 请求视为对本地主机的请求,并将它们发送回自己。
我可以在 vagrant 端或 docker 端设置任何替代配置来缓解这个问题吗?简而言之,我想要一个 vagrant 环境,我的应用服务器上的容器可以与数据库服务器对话。请注意,数据库直接安装在数据库主机上,而不是 docker 容器内的 运行。此外,这是为了模拟不使用 vagrant 的生产环境,所以我希望任何 docker 更改也能在更正常的网络场景中工作。
默认情况下,VirtualBox 专用网络仅供主机使用,因此一个 VM 无法看到另一个。您可以使用 virtualbox__intnet 设置将其更改为使用 VirtualBox 内部网络,因此您需要像 host.vm.network "private_network", ip: ip, virtualbox__intnet: true
这样的行
这里有更多信息http://docs.vagrantup.com/v2/virtualbox/networking.html
请注意,这是特定于 VirtualBox 的。如果这也需要与不同的提供商合作,我认为您将需要使用 public 网络以获得必要的桥接并考虑所有相关问题以确保其安全。参见 http://docs.vagrantup.com/v2/networking/public_network.html。
我有一个使用 vagrant 设置的实验室环境。它由3台机器组成,两台安装了docker 1.4.1的应用服务器和一台安装了postgres 9.3的数据库服务器。所有机器都是 运行 Centos 6.6.
环境是使用仅主机专用网络设置的。这是 vagrant 文件
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 请求视为对本地主机的请求,并将它们发送回自己。
我可以在 vagrant 端或 docker 端设置任何替代配置来缓解这个问题吗?简而言之,我想要一个 vagrant 环境,我的应用服务器上的容器可以与数据库服务器对话。请注意,数据库直接安装在数据库主机上,而不是 docker 容器内的 运行。此外,这是为了模拟不使用 vagrant 的生产环境,所以我希望任何 docker 更改也能在更正常的网络场景中工作。
默认情况下,VirtualBox 专用网络仅供主机使用,因此一个 VM 无法看到另一个。您可以使用 virtualbox__intnet 设置将其更改为使用 VirtualBox 内部网络,因此您需要像 host.vm.network "private_network", ip: ip, virtualbox__intnet: true
这里有更多信息http://docs.vagrantup.com/v2/virtualbox/networking.html
请注意,这是特定于 VirtualBox 的。如果这也需要与不同的提供商合作,我认为您将需要使用 public 网络以获得必要的桥接并考虑所有相关问题以确保其安全。参见 http://docs.vagrantup.com/v2/networking/public_network.html。