繁体   English   中英

Docker 容器的多个静态 IP

[英]Multiple static IPs for Docker containers

我有一个 Docker 主机,它应该允许每个容器有多个静态 IP 地址。 然后容器内的应用程序应该能够选择从哪个地址向远程主机发送流量(例如ping -I <source-address> example.com )。

想象一下这样的设置:IP 地址10.0.0.10 - 10.0.0.19分配给 ContainerA, 10.0.0.20 - 10.0.0.29分配给 ContainerB,依此类推。 任何到 ContainerA 地址范围的流量都会转发到 ContainerA,而传出流量则来自 ContainerA 可以选择的地址范围。 这同样适用于ContainerB。


在此处输入图片说明


在此处输入图片说明


默认的--net=bridge模式似乎不支持这一点。 我能得到的最接近的是,到任何 ContainerA 地址的传入流量都正确转发到容器,但传出流量始终来自同一个地址。

使用--net=host ,第一个容器将附加到所有可用的 IP 地址,因此第二个容器将无法打开其 IP 范围内的套接字。

--ip docker run命令的--ip选项似乎接近我所需要的,如这篇博文中所述。 不幸的是,它似乎不支持每个容器的多个静态 IP。

如果更方便,使用 CIDR 子网而不是 IP 范围就可以了。

我需要如何配置 Docker 来实现这一点?

我认为您可以通过自定义docker0网桥甚至创建自己的网桥来做到这一点

每个docker容器只有一个IP。 我们还可以通过将桥接网络设置为

泊坞窗网络创建net1 --driver = bridge --subnet =“ 192.168.0.1/27”

如果您不提及驱动程序,则默认情况下为桥接网络。

因此,在这里使用--subnet,您可以为网络指定一个自定义IP地址,并使用该网络,还可以为该网络内部的容器提供一个自定义IP地址。

然后运行一个容器,

docker运行-it --network = net1 --ip =“ 192.168.0.3” --name = MyContainer image_name

现在,通过这种方式,您可以使32-27 = 5,即(2 ^ 5)-2个Docker容器。

嗯,我想知道我是否真的理解你问题的正确含义。 您说:“而传出流量来自 ContainerA 可以选择的那个范围内的地址。” 这意味着您的连接应该是 UDP。 或者 TCP 连接将在没有相同 IP 的入站和出站流量的情况下中断? 对 ?

我认为您可以创建一个网络并将该网络上的 IP 地址分配给您的容器。 您可以在命令行中执行此操作,但我更愿意使用 docker-compose 文件。 它可能是这样的:

version: '2.1'

services:

  containerA:
    image: xxx
    networks:
      local_net:
        ipv4_address: 10.0.0.10
        ipv4_address: 10.0.0.11
        ...

  containerB:
    image: xxx
    networks:
      local_net:
        ipv4_address: 10.0.0.20
        ipv4_address: 10.0.0.21
        ...
      
networks:
  local_net:
    ipam:
      driver: default
      config:
        - subnet: 10.0.0.0/24
          gateway: 172.16.200.1

如果您想自动创建文件,我认为您可以编写脚本。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM