Docker自定义bridge网络是微服务本地开发和单机部署的首选方案,需显式创建、指定子网、容器明确加入同一网络以启用DNS解析和服务发现,内部通信用容器名+端口,对外才映射宿主机端口。

Docker Bridge 网络是微服务本地开发和单机部署最常用、最稳妥的网络方案,配得对,服务才能互相发现、稳定通信。关键不是“能不能通”,而是“怎么通得干净、安全、可维护”。
用自定义 bridge 网络,别依赖默认 bridge
默认的 bridge 网络(即 docker0)不支持容器名自动解析,所有服务只能靠 IP 通信,硬编码 IP 或写脚本查 IP 都不可靠,也不符合微服务设计原则。自定义 bridge 网络才是生产就绪的起点。
- 使用
docker network create显式创建独立网桥 - 指定子网和网关,避免与宿主机或其他容器网段冲突
- 示例命令:
docker network create --driver bridge \ --subnet 192.168.100.0/24 \ --gateway 192.168.100.1 \ microservices-net
容器启动时明确指定网络
每个微服务容器必须显式加入同一自定义网络,才能启用内置 DNS 解析和服务发现。
启动时用
--network microservices-net参数容器名(或
--name指定的名称)即为服务名,其他容器可直接curl http://service-a:8080-
若使用 Docker Compose,直接在
services下声明networks即可自动接入:services: auth-service: image: auth:v1 networks: - microservices-net api-gateway: image: gateway:v1 networks: - microservices-net
端口暴露要分清内外角色
Bridge 网络内部通信走容器名 + 内部端口(如 auth-service:8080),对外提供服务才需映射到宿主机端口。
- 内部调用:
http://auth-service:8080/login—— 不需要ports字段 - 对外访问(如浏览器访问网关):在 service 中加
ports: ["80:80"] - 错误做法:给所有服务都暴露宿主机端口,易引发端口冲突,也破坏网络隔离
验证通信是否真正就绪
光看容器 running 不代表网络通。建议每次部署后快速验证:
- 进入某容器:
docker exec -it api-gateway sh - 尝试解析服务名:
nslookup auth-service(应返回192.168.100.x) - 测试连通性:
curl -v http://auth-service:8080/health - 查看网络详情:
docker network inspect microservices-net,确认所有容器都在Containers列表里
不复杂但容易忽略。


















