如何设置具有相同地址的docker集装箱组?

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

container1:172.0.0.10 – pipe理节点

container2:172.0.0.20 – 数据库节点

container3:172.0.0.30 – UI节点

我知道如何pipe理容器作为一个群体,以及如何将它们之间相互连接,但问题是,IP信息位于很多地方(数据库等),所以当你从这样的形象部署容器的IP被改变,基础设施被打破。

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

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

不要这样做。

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

一些build议:

  • 您只需通过主机上的端口进行转发即可脱身。 所以你的数据库总是HOST_IP:88888或类似的。

  • 如果你可以在你的configuration文件中放置环境variables,或者在容器启动的时候dynamic生成configuration文件,你可以使用Docker链接将链接容器的IP放入一个环境variables中。

如果这些不适合你,你需要开始寻找更完整的解决scheme,比如大使模式和领事 。 一般来说,这个问题被称为服务发现。

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

  • 使用docker在主机上创buildip别名(可能是许多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别名一起),一切都将继续工作。