如何使用相同的内部IP地址创建docker容器?

Paw*_*tal 1 networking docker docker-swarm

我有一个环境,我需要在Docker容器中运行一些外部软件.该软件试图通过特定的IP地址连接到我们的产品 - 比方说192.168.255.2 - 这个地址是固定的,无法更改.此外,主机IP地址也必须设置为特定的IP - 比方说192.168.255.3.

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

  • 他们中的第一个对IP寻址有严格的限制 - 我们称之为"第一"
  • 第二个没有这样的限制并提供类似的功能 - 对于这个例子,我们假设这个接口的IP地址设置为10.1.1.2/24 - 让我们称之为"秒"

我需要同时运行多个docker容器,每个容器应连接到一个产品(1对1的关系).

在容器内运行的东西必须认为它们通过使用"第一"网络接口(具有静态IP分配且无法更改的网络接口)与产品连接.

我想要做的就是创建具有相同IP地址的容器,假装容器内的应用程序使用产品的"第一"以太网接口,然后在主机级别我想使用IPTables将所有流量重定向到"第二"接口.

因此,我有一个主要问题:如何使用相同的IP地址创建多个docker容器?

BMi*_*tch 5

根据您的问题的确切措辞,docker可以选择共享另一个容器的网络堆栈.简单地运行:

docker run -d --name containera yourimage
docker run -d --net container:containera anotherimage
Run Code Online (Sandbox Code Playgroud)

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

我建议您在docker主机上安装两个接口并绑定到您需要的主机上的IP,然后不要担心容器的实际IP.结果将更容易管理.以下是如何绑定到主机上的单个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
Run Code Online (Sandbox Code Playgroud)