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

时间:2016-12-29 09:05:57

标签: 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将所有流量重定向到" second"接口

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

1 个答案:

答案 0 :(得分:5)

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

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

您将看到第二个容器具有相同的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