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

时间:2015-02-17 10:33:53

标签: networking docker distributed bridge

我打算在docker容器中安装分布式软件。它可以是:

container1:172.0.0.10 - 管理节点

container2:172.0.0.20 - 数据库节点

container3:172.0.0.30 - UI节点

我知道如何将容器作为一个组进行管理以及如何在彼此之间链接它们,但问题是ip信息位于许多地方(数据库等),因此当您从这样的映像部署容器时,ip会被更改并且基础设施破裂了。

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

问题是,您能否建议如何创建此类基础架构?感谢。

2 个答案:

答案 0 :(得分:1)

不要这样做。

容器是短暂的,它们来来往往,将被分配新的IP。与此斗争是一个坏主意。相反,您需要弄清楚如何处理不断变化的IP。有一些解决方案,您应该使用的解决方案完全取决于您的用例。

一些建议:

  • 您可以通过主机上的端口转发而逃脱。所以你的数据库总是HOST_IP:88888或类似的。

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

如果这些不适合您,您需要开始寻找更完整的解决方案,例如ambassador patternconsul。通常,此问题称为服务发现。

答案 1 :(得分:1)

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

  • 在具有docker的主机上创建ip别名(可能是许多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

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