将不同的公共IP分配给不同的Docker容器

时间:2016-09-06 15:41:51

标签: networking docker ip port docker-compose

我需要运行两个容器,每个容器包含一个特定(公共)IP上的脚本绑定(11.11.11.20和11.11.11.21)。泊坞主机本身位于10.10.10.222。

我写了这个docker-compose.yml

version: '2'
services:
  nginx-0:
    image: nginx:1.10
    networks:
      app_net:
        ipv4_address: 11.11.11.20

  nginx-1:
    image: nginx:1.10
    networks:
      app_net:
        ipv4_address: 11.11.11.21

networks:
  app_net:
    driver: bridge
    ipam:
      driver: default
      config:
      - subnet: 11.11.11.20/30

我的模糊ip a

3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:00:00:00:00:00 brd ff:ff:ff:ff:ff:ff
    inet 10.10.10.222/27 brd 10.10.10.223 scope global eth1
       valid_lft forever preferred_lft forever
    inet 11.11.11.20/32 brd 11.11.11.20 scope global eth1:0
       valid_lft forever preferred_lft forever
    inet 11.11.11.21/32 brd 11.11.11.21 scope global eth1:1
       valid_lft forever preferred_lft forever

但它告诉我地址已在使用

有没有解决办法呢?

提前致谢! 多米尼克

1 个答案:

答案 0 :(得分:1)

将地址更改为11.11.11.20/30子网内的有效值:nginx-0和nginx-1应具有地址11.11.11.21和11.11.11.22。地址11.11.11.20无效,因为它是子网地址。

您似乎也在主接口网络10.10.10.222/27之外的桥接接口上使用地址。如果在主网络和辅助网络中都存在具有接口(IP地址)的路由器,则辅助网络中的节点可以仅到达其他IP地址。但是,这在11.11.11.20网络中很难实现,因为此网络中的所有可用地址都被您的nginx服务器占用。对于桥接网络,最简单的解决方案是使用主网络中的地址用于nginx服务器,并在主网络10.10.10.222/27中指定正确的网关地址。相反,您可以使用更大的网络,如11.11.11.20/27,并将nginx服务器和路由器的IP地址放入其中。