Networking 如何设置具有相同地址的docker容器组?

Networking 如何设置具有相同地址的docker容器组?,networking,docker,distributed,bridge,Networking,Docker,Distributed,Bridge,我将在docker容器中安装分布式软件。它可以是这样的: container1:172.0.0.10-管理节点 container2:172.0.0.20-数据库节点 container3:172.0.0.30-UI节点 我知道如何将容器作为一个组进行管理,以及如何将它们相互链接,但是问题是,ip信息位于许多地方(数据库等),因此,当您从此类映像部署容器时,ip会发生更改,基础结构也会断开 我看到的最简单的方法是在主机上使用多个虚拟网络,这样,容器将具有相同的地址,但不会相互影响。然而,据我所知

我将在docker容器中安装分布式软件。它可以是这样的:

container1:172.0.0.10-管理节点

container2:172.0.0.20-数据库节点

container3:172.0.0.30-UI节点

我知道如何将容器作为一个组进行管理,以及如何将它们相互链接,但是问题是,ip信息位于许多地方(数据库等),因此,当您从此类映像部署容器时,ip会发生更改,基础结构也会断开

我看到的最简单的方法是在主机上使用多个虚拟网络,这样,容器将具有相同的地址,但不会相互影响。然而,据我所知,docker目前不可能,因为您无法在多个网桥连接到一个物理接口的情况下启动docker守护进程

问题是,你能建议如何创建这样的基础设施吗?谢谢。

不要这样做

容器是短暂的,它们来来去去,将被分配新的IP。反对这是个坏主意。相反,你需要弄清楚如何应对IP的变化。有几个解决方案,您应该使用哪一个完全取决于您的用例

一些建议:

  • 您可能只需通过主机上的端口进行转发即可。因此,您的数据库始终是主机IP:88888或类似的

  • 如果可以将环境变量放入配置文件中,或者在容器启动时动态生成配置文件,则可以使用Docker链接,将链接容器的IP放入环境变量中


如果这些不适合您,您需要开始寻找更完整的解决方案,如和。一般来说,这个问题称为服务发现。

Adrian给出了一个很好的答案。但如果你不能使用这种方法,你可以做下一件事:

  • 使用docker在主机上创建ip别名(可能是许多docker主机)
  • 然后运行此地址的容器映射端口


现在,您可以通过固定地址访问容器,并且可以将它们移动到不同的主机(以及ip别名),一切都将继续工作。

感谢您回答ISanych,但是问题是,同一主机上会有许多这样的容器组,因此它们无法与主机上的相同ip连接。因此,唯一的方法是为每个容器组创建专用网络。因此,有可能拥有相同的ip。不过,它目前在docker中不起作用,所以可能对我来说这不是正确的解决方案:(感谢您的回答Adrian,我担心它对我不起作用,因为数据库中有许多IP条目(即使我在UI中创建基础设施时添加了主机名)。因此,问题是我在docker安装中仍然需要几个专用网络。可能我需要其他解决方案。
docker run --name management --restart=always -d -p 172.0.0.10:NNNN:NNNN management
docker run --name db --restart=always -d -p 172.0.0.20:NNNN:NNNN db
docker run --name ui --restart=always -d -p 172.0.0.30:NNNN:NNNN ui