如何使docker不要将子网用作桥接网络或添加路由异常
我有一个docker主机(CentOs7),我正在运行多个dockerized应用程序,将来会有更多.我有一个外部服务的问题,我需要从主机访问,使用172.18.100.101地址.
Docker自动为其创建的桥接网络分配子网,172.18.x,172.19.x等:
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 10.x.x.x 0.0.0.0 UG 0 0 0 eth0
172.17.1.0 0.0.0.0 255.255.255.0 U 0 0 0 docker0
172.18.0.0 0.0.0.0 255.255.0.0 U 0 0 0 br-0a7f3df38b5c
172.19.0.0 0.0.0.0 255.255.0.0 U 0 0 0 br-636432c82f83
我看到的选项:1.告诉Docker不要将172.18.0.0子网用于网桥.我不认为这在码头工作中是可能的.2.对于每个docker容器,我可以开始指定一个子网 – 但这会变得非常有问题,因为你需要确保它们不会发生冲突,而且docker-compose.yml文件是在主机之间共享的,所以这是一个管理噩梦.3.尝试以不同方式在主机上路由所需的ip(172.18.100.101) – 而172.18.0.0子网仍在那里.我不确定这是否可行.我已尝试添加路由,但没有帮助,可能是因为它在172.18.0.0规则之后而不是之前添加.
$sudo route add -host 172.18.100.101 dev eth0
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 10.x.x.x 0.0.0.0 UG 0 0 0 eth0
172.17.1.0 0.0.0.0 255.255.255.0 U 0 0 0 docker0
172.18.0.0 0.0.0.0 255.255.0.0 U 0 0 0 br-0a7f3dfsudo ip route show to match 172.18.198.12038b5c
172.18.100.101 0.0.0.0 255.255.255.255 UH 0 0 0 eth0
172.19.0.0 0.0.0.0 255.255.0.0 U 0 0 0 br-636432c82f83
有任何想法吗?我想问题是如何为选择ip(或子网)添加“异常”路由,并确保它在主规则之前应用.
编辑(2018-06-21):问题不在于尝试连接Docker容器中的服务.我的问题是在我的网络上有一个服务(在不同的服务器上,不是由我拥有/控制)与ip 172.18.100.101,但我无法从该主机连接到此服务,因为在此主机上Docker自动分配172.18 .0.0范围到它创建的桥接网络,因此任何连接尝试172.18.100.101都会被发送到桥接器创建的Docker而不是该外部主机.