如何创build具有相同内部IP地址的docker集装箱?

我有一个需要在Docker容器中运行一些外部软件的环境。 该软件试图通过特定的IP地址连接到我们的产品 – 比如说192.168.255.2 – 这个地址是固定的,不能改变。 而且,主机IP地址也必须设置为特定的IP地址 – 假设192.168.255.3。

产品支持2个以太网接口:

  • 首先对IP地址有严格的限制 – 我们称之为“第一”
  • 秒没有这样的限制,并提供类似的function – 对于这个例子,让我们假设这个接口的IP地址设置为10.1.1.2/24 – 我们称之为“秒”

我需要同时运行多个docker集装箱,每个集装箱应连接到一个产品(1对1关系)。

在容器中运行的东西必须认为它们通过使用“第一个”networking接口(具有静态IP分配并且不能被改变的接口)连接到产品。

我所要做的就是创build具有相同IP地址的容器,以假装容器内的应用程序使用产品的“第一个”以太网接口,然后在主机级别,我想要使用IPTables将所有通信redirect到“第二个”接口。

因此,我有一个主要问题:如何创build多个具有相同IP地址的Docker容器?

从你的问题确切的措辞,docker可以select共享另一个容器的networking堆栈。 只需运行:

docker run -d --name containera yourimage docker run -d --net container:containera anotherimage 

你会看到第二个容器具有相同的IP接口,甚至可以看到第一个容器使用的端口。

我build议你在Docker主机上安装两个接口,并绑定到你需要的主机上的IP,然后不要担心容器的实际IP。 结果将更容易pipe理。 以下是如何绑定到主机上的单个IP,端口8080和8888映射到两个不同容器的端口80:

 docker run -d -p 192.168.255.2:8080:80 --name nginx8080 nginx docker run -d -p 192.168.255.2:8888:80 --name nginx8888 nginx