我有一个定义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?
答案 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
有关更多详细信息,请检查以下链接。