gpt4 book ai didi

networking - 从 docker 容器内访问仅 vagrant/virtual box 主机网络上的其他机器

转载 作者:行者123 更新时间:2023-12-04 18:05:34 26 4
gpt4 key购买 nike

我有一个使用 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 配置 loopback 接口(interface)来处理向网络上的每台机器发送请求。但是在容器中,由于未配置此接口(interface),因此容器将所有 127.0.0.x 请求视为对 localhost 的请求,并将它们发送回自身。

我可以在 vagrant 端或 docker 端设置任何替代配置来缓解这个问题吗?简而言之,我想要一个 vagrant 环境,我的应用服务器上的容器可以与数据库服务器通信。请注意,db 直接安装在 db-host 上,而不是在 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 .

关于networking - 从 docker 容器内访问仅 vagrant/virtual box 主机网络上的其他机器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29021823/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com