Docker 网络详解:从 bridge 到 overlay 的实战指南

为什么需要了解 Docker 网络?

容器化部署已经成为企业标配,但很多人对 Docker 网络的理解还停留在「能用」层面。当遇到跨主机通信、服务发现、网络隔离等实际问题时,才发现网络配置才是容器编排的核心技能之一。

本文梳理 Docker 网络的四种主流模式,以及生产环境中的最佳实践。

Docker 网络四种模式

1. Bridge 模式(默认)

每个容器分配独立网络命名空间,通过虚拟网桥 docker0 互联。

┌─────────┐     ┌─────────┐
│ Container │    │ Container │
│ 172.17.0.2│    │ 172.17.0.3│
└────┬─────┘    └────┬─────┘
     │               │
     └───────┬───────┘
             ▼
       docker0 (bridge)
             │
        宿主机 eth0
  • 适用:单机多容器,开发测试环境
  • 特点:开箱即用,容器间通过 IP 通信;端口需 -p 映射到宿主机

2. Host 模式

容器直接使用宿主机的网络栈,不创建独立的网络命名空间。

  • 适用:对网络性能要求高的场景(如高吞吐量的网络应用)
  • 注意:端口不能重复占用,安全性降低

3. None 模式

容器只有 loopback 接口,没有外部网络。适合完全自定义网络的场景。

4. Overlay 模式(跨主机)

基于 VXLAN 封装,实现跨物理主机的容器互通——Docker Swarm / Kubernetes 的基础。

 Host A (192.168.1.10)          Host B (192.168.1.20)
 ┌─────────────────┐           ┌─────────────────┐
 │ Container Web   │           │ Container DB     │
 │ 10.0.0.2        │──VXLAN──▶│ 10.0.0.3         │
 └────────┬────────┘           └────────┬─────────┘
          │                             │
      overlay network            overlay network
          │                             │
     eth0 (VXLAN)                eth0 (VXLAN)
          │                             │
          └──────── 物理交换机 ─────────┘

常用操作速查

# 创建自定义 bridge 网络(推荐替代默认 bridge)
docker network create my-app-net

# 运行容器指定网络
docker run -d --network my-app-net --name web nginx:alpine

# 同一网络内的容器通过容器名互相访问(内置 DNS)
# 例如 web 容器可以通过 http://db:3306 访问 db 容器

# 查看网络列表
docker network ls

# 检查某网络的详细信息
docker network inspect my-app-net

# 断开/连接容器的网络
docker network disconnect my-app-net web
docker network connect my-app-net web

生产环境建议

1. 别用默认 bridge
默认 bridge 不支持 DNS 解析,只能用 IP 通信。始终创建自定义 bridge 网络。

2. 用 compose 统一管理网络

version: '3.8'
services:
  web:
    image: nginx:alpine
    networks:
      - frontend
      # 可同时接入多个网络
  db:
    image: mysql:8.0
    networks:
      - backend

networks:
  frontend:
  backend:

3. 跨主机用 overlay + Swarm/K8s
手动配置 VXLAN 太复杂,上规模后直接走容器编排平台。

4. 注意安全组 / 防火墙
容器间的通信在宿主机内部完成,但宿主机之间的 VXLAN 流量需要防火墙放行 UDP 4789 端口。

小结

Docker 网络的本质是 Linux 网络命名空间 + veth pair + bridge/overlay 的组合。理解了这几层抽象,排查容器网络问题就不再黑盒。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇
©2003-2026 土人老周