自定义网桥需显式配置子网、网关并关闭非必要转发:用docker network create --driver bridge --subnet=172.24.0.0/24 --gateway=172.24.0.1 --opt com.docker.network.bridge.enable_icc=false --opt com.docker.network.bridge.forwarding=0 app-net确保隔离性、可控性与稳定性。

自定义网桥不是建完就万事大吉,关键在参数配置是否贴合实际负载。默认创建的 bridge 网络虽比 docker0 强,但若不调参,高并发或长连接场景下仍易出现丢包、DNS 解析慢、容器间通信延迟升高等问题。
显式分配子网与网关,避免地址冲突
不指定子网时,Docker 可能复用已有网段,导致 IP 冲突或路由混乱。生产环境必须固定 CIDR 和网关:
- 用 docker network create --driver bridge --subnet=172.24.0.0/24 --gateway=172.24.0.1 app-net 显式声明,确保子网不与宿主机、其他网络重叠
- 子网掩码建议用 /24(256 地址)起步;若服务超 50 个,可扩至 /22 或 /20,避免 IP 耗尽引发容器启动失败
- 网关地址必须落在子网范围内,且不能被其他设备占用;可用 ip addr show 检查宿主机已用地址段
关闭非必要转发,减少内核路径开销
bridge 网络默认启用容器间通信(ICC)和 ARP 转发,对微服务架构反而增加干扰:
- 加 --opt com.docker.network.bridge.enable_icc=false 关闭跨容器自动互通,改用服务名或静态 IP 显式调用,提升安全与可控性
- 加 --opt com.docker.network.bridge.forwarding=0 禁用网桥的 IP 转发能力,防止意外成为中继节点
- 若容器仅需访问外网、不需互访,还可加 --opt com.docker.network.bridge.default_bridge=false 隔离默认行为
绑定端口映射范围,规避宿主机端口争抢
默认 -p 映射会绑定到 0.0.0.0,可能与宿主机上运行的 Nginx、MySQL 等服务冲突:
- 用 --opt com.docker.network.bridge.host_binding_ipv4=127.0.0.1 限制只绑定到本地回环,适合调试或仅本机访问的服务
- 如需外部访问,明确指定宿主机 IP:--opt com.docker.network.bridge.host_binding_ipv4=192.168.10.100,避免泛监听引发端口占用异常
- 批量部署时,配合 --publish-all + 容器内固定端口,比逐个 -p 更少生成 iptables 规则,降低规则匹配耗时
启用嵌入式 DNS 并控制解析行为
默认 bridge 不支持服务发现,自定义网桥自动启用内置 DNS,但需注意其行为边界:
- 容器内直接用服务名(如 curl http://db:5432)即可解析,无需额外配置 /etc/hosts
- DNS 查询默认超时为 5 秒,高频调用时易拖慢响应;可在容器启动时加 --dns-option timeout:1 缩短等待
- 若业务强依赖稳定解析,建议搭配静态 IP 启动(--ip 172.24.0.10),绕过 DNS 查找环节,尤其适用于 Java 应用连接数据库等关键链路











