1. Docker 网络背后的核心概念

在深入之前,先建立三个基础认知,后面所有模式都围绕它们展开:

2. bridge 网络:默认的隔离模式

这是 docker run 默认使用的网络,也是单机部署最常用的选择。

$ docker network ls
NETWORK ID     NAME      DRIVER    SCOPE
b7a1c2e4f0a1   bridge    bridge    local
$ docker run -d --name web -p 8080:80 nginx
$ docker inspect web --format '{{.NetworkSettings.Networks.bridge.IPAddress}}'
172.17.0.2

工作原理与特点:

最佳实践 docker network create --driver bridge mynet 创建自定义网络, 使用自定义网络时容器间可用容器名直接解析(内置 DNS),比记住 IP 更可靠。

3. host 网络:共享宿主机网络栈

容器不再拥有自己的网络命名空间,直接复用宿主机的网络栈。

$ docker run -d --name nginx-host --network host nginx
# 此时无需 -p 映射,nginx 直接监听宿主机的 80 端口

4. overlay 网络:跨主机的魔法

在 Swarm 或 Kubernetes 多节点场景下,容器分布在不同宿主机上,需要一个跨主机的虚拟网络。

$ docker network create -d overlay --attachable prod-net
# 使用 VXLAN 封装,节点间通过 4789/UDP 隧道通信
$ docker run -d --network prod-net --name app-a nginx
$ docker run -d --network prod-net --name app-b nginx
$ docker exec app-a ping app-b
PING app-b (10.0.0.6) 56(84) bytes of data.
注意 真实生产环境(Kubernetes)通常使用 CNI 插件(Calico、Flannel、Cilium)实现 overlay 网络, 不再直接依赖 Docker 内置网络。理解概念即可,选型交给编排平台。

5. 选型建议

把常见需求映射到网络模式,直接对号入座:

场景 推荐模式 理由
单机常规业务容器 自定义 bridge 隔离 + DNS 服务发现
端口敏感/极致性能 host 无 NAT 开销,低延迟
跨主机服务发现 overlay / K8s CNI 隧道 + 内置 DNS
临时测试容器 默认 bridge 开箱即用

网络问题排查时,先用 docker network inspect 看拓扑,再用 docker exec 进容器用 ip addr / traceroute 验证连通性, 90% 的「网络不通」都能通过这两步解决。

← 返回首页