跳至正文
老丹的足迹 —— 代码写给机器,游记写给自己,感悟写给时间
老丹的足迹 老丹的足迹
老丹的足迹 老丹的足迹
  • 首页
  • 示例页面
  • 首页
  • 示例页面
老丹的足迹 老丹的足迹
老丹的足迹 老丹的足迹
  • 首页
  • 示例页面
  • 首页
  • 示例页面

Docker 容器网络接口深度解析:从 veth 到网桥的完整拓扑

在 Docker 容器化环境中,网络接口的配置与连接关系往往隐藏着容器通信的核心逻辑。本文基于一个真实运行 Portainer 和 WireGuard Easy 的 Linux 服务器,系统梳理 Docker 创建的各类网络接口及其互连方式。

一、Docker 网络接口概览

通过 ifconfig 命令查看,系统中共有 7 个网络接口,其中 3 个由 Docker 创建或管理:

  1. docker0:Docker 默认网桥,IP 为 172.17.0.1/16,当前处于 NO-CARRIER 状态
  2. br-cf11c3d7ebc2:自定义网桥,IP 为 172.18.0.1/16,状态 RUNNING
  3. br-3dcf6375a34a:另一个自定义网桥,IP 为 172.19.0.1/16,状态 RUNNING

此外还有两个 veth(虚拟以太网)设备:

  • veth0be9e0a
  • veth1abc853

以及主机的物理网卡 eth0 和回环接口 lo。

二、通过 docker network ls 识别网络名称

执行 docker network ls 得到以下输出:

NETWORK IDNAMEDRIVER
3e3a6a5bf28bbridgebridge
70c44d856781hosthost
023dadf581e4nonenull
cf11c3d7ebc2portainer_defaultbridge
3dcf6375a34awg-easy_defaultbridge

由此可以明确:

  • docker0 对应默认的 bridge 网络
  • br-cf11c3d7ebc2 对应 portainer_default 网络
  • br-3dcf6375a34a 对应 wg-easy_default 网络

三、veth 与网桥的连接关系

使用 bridge link show 命令可以精确查看每个 veth 归属于哪个网桥:

63: veth0be9e0a@eth0: master br-cf11c3d7ebc2 state forwarding
406: veth1abc853@eth0: master br-3dcf6375a34a state forwarding

对应关系:

  • veth0be9e0a → br-cf11c3d7ebc2 → portainer_default 网络
  • veth1abc853 → br-3dcf6375a34a → wg-easy_default 网络

四、Docker 的 veth 连接原理

veth 是一个虚拟以太网对(pair),就像一根虚拟网线:

  • 一端在容器内部,通常命名为 eth0
  • 另一端在宿主机上,命名为 vethXXXX(如 veth0be9e0a)

宿主机端的 veth 被加入到某个 Docker 网桥中,成为该网桥的一个端口。容器通过这个 veth pair 与同网桥下的其他容器或宿主机通信。

拓扑结构如下:

五、状态解读

  • state forwarding:veth 处于正常转发状态,能够收发数据包
  • master:指明该 veth 从属于哪个网桥
  • @eth0:表示 veth pair 的另一端在容器内命名为 eth0
  • docker0 无容器连接,因此处于 NO-CARRIER 状态

六、总结

在一个典型的 Docker 多容器环境中:

  1. 每个自定义网络都会创建一个独立的 Linux 网桥
  2. 每个运行中的容器通过一对 veth 设备连接到对应的网桥
  3. veth 的宿主机端以 veth 前缀命名,容器端统一命名为 eth0
  4. 通过 bridge link show 可以精确追踪每个 veth 所属的网桥

这种网络模型实现了容器间的逻辑隔离,同时保证了高效的二层通信能力。对于运维人员而言,理解 veth 与网桥的映射关系,是排查容器网络问题的基础技能。

作者

老丹

关注我
其他文章
上一个

Portainer 完全安装与使用指南

关于博主

    老丹是一名C/C++后台开发工程师,信奉“无抽象不设计,无性能不生产”。

  • 技术栈:Modern C++、Linux环境编程、多线程/并发、网络编程等。
  • 信条:能用constexpr解决的问题绝不拖到运行时,能靠RAII避免的泄漏绝不写析构。
  • 正在填坑:从解封装到渲染的C++全链路实现,正在驯服FFmpeg与H.264/H.265。
  • 输出原则:这里的每一段代码都经过-Wall -Wextra -Werror -O2的洗礼。

搜索

近期文章

  • Docker 容器网络接口深度解析:从 veth 到网桥的完整拓扑 2026年6月13日
  • Portainer 完全安装与使用指南 2026年6月13日
  • wg-easy 完全安装指南 2026年6月13日
  • Ubuntu WireGuard 客户端:安装、配置与日常管理 2026年6月13日
  • 认证与授权双雄:一文讲透LDAP和OAuth的核心差异 2026年6月13日

文章分类

  • C/C++开发 (9)
  • Linux服务配置 (7)
  • 计算机理论 (6)
联系我们:📍 地址:中国·广东省深圳市   |   ✉️ 邮箱:support@tanglinux.com   |   💬 QQ:870866607
版权所有:老丹的足迹粤ICP备2026061170号-1       公安备案图标 粤公网安备44030002013274号