在Docker 18.06和Docker Compose 1.20.0中配置网桥网络和容器CIDR的问题

时间:2018-08-06 23:48:43

标签: docker docker-compose

我有一个定义3个网络的docker-compose.yaml和一个将网桥IP CIDR分配为192.168.1.5/24的daemon.json配置。每当容器出现docker-compose时,就会为它们分配不同范围内的IP地址(这是默认的CIDR,而不是我配置的IP地址):

docker-compose.yaml:

networks:
  service:
  messaging:
  db:

/etc/docker/daemon.json

{
    "bip": "192.168.1.5/24",
    "fixed-cidr": "192.168.1.5/25",
    "fixed-cidr-v6": "2001:db8::/64",
    "mtu": 1500
}

当docker-compose调出容器时,它们仍位于默认的CIDR上,而不是已配置的内容:

docker container inspect bfa5822460c8 | grep \"IPAddress\"
"IPAddress": "172.19.0.7",

并且网桥网络仍处于默认状态:

br-2b656d63cf20 Link encap:Ethernet  HWaddr 02:42:29:9c:5f:f0  
          inet addr:172.19.0.1  Bcast:172.19.255.255  Mask:255.255.0.0
          inet6 addr: fe80::42:29ff:fe9c:5ff0/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:80 errors:0 dropped:0 overruns:0 frame:0
          TX packets:64 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:12802 (12.8 KB)  TX bytes:7076 (7.0 KB)

docker0网桥具有正确的地址:

docker0   Link encap:Ethernet  HWaddr 02:42:f5:75:42:ea  
          inet addr:192.168.1.5  Bcast:192.168.1.255  Mask:255.255.255.0
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B

我的问题是:“如何配置docker守护程序以在我在/etc/docker/daemon.json中指定的网络上设置容器并桥接IP?

2 个答案:

答案 0 :(得分:0)

这可以通过为每个定义的网络指定特定的子网配置来实现:

docker-compose.yaml:

networks:
  db:
    driver: bridge
    ipam:
      driver: default
      config:
        - subnet: 172.16.238.0/24
  messaging:
    driver: bridge
    ipam:
      driver: default
      config:
        - subnet: 172.16.239.0/24
  service:
    driver: bridge
    ipam:
      driver: default
      config:
        - subnet: 172.16.240.0/24

答案 1 :(得分:0)

daemon.json仅用于customize the default bridge network docker0

默认情况下,Compose会为您的应用设置一个网络,在这种情况下,您使用的是br-2b656d63cf20而不是docker0

在这里,我们使用ipam配置来指定此应用程序网络的ip范围。

version: '3'
services:
  web:
    image: nginx:alpine
    ports:
      - 8000:80
  db:
    image: postgres:11-alpine
networks:
  # default network (not docker0) for web & db service
  default:
    ipam:
      config:
        - subnet: 172.28.0.0/16

有关更多详细信息,请检查以下链接。