当前位置: 首页 > ds >正文

Docker Swarm 容器与普通 Docker 容器的网卡差异

问题背景

在 Docker Swarm 网络空间启动的容器有两张网卡(eth0eth1),而普通 Docker 容器只有一张网卡(eth0)。以下通过分析 ip addr showip link show 的输出,解释原因。

命令输出解析

Docker Swarm 容器(ip addr show

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft forever
36: eth0@if37: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1450 qdisc noqueue state UP link/ether 02:42:0a:00:01:06 brd ff:ff:ff:ff:ff:ffinet 10.0.1.6/24 brd 10.0.1.255 scope global eth0valid_lft forever preferred_lft forever
38: eth1@if39: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue state UP link/ether 02:42:ac:12:00:03 brd ff:ff:ff:ff:ff:ffinet 172.18.0.3/16 brd 172.18.255.255 scope global eth1valid_lft forever preferred_lft forever
  • lo:回环接口,IP 为 127.0.0.1/8,用于本地通信。
  • eth0:IP 为 10.0.1.6/24,MTU 为 1450,连接 overlay 网络,用于 Swarm 集群跨主机通信。
  • eth1:IP 为 172.18.0.3/16,MTU 为 1500,连接桥接网络(如 docker_gwbridge),用于本地或外部通信。

普通 Docker 容器(ip link show

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
40: eth0@if41: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue state UP link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff
  • lo:回环接口,功能同上。
  • eth0:连接默认桥接网络(如 docker0),MTU 为 1500,IP 通常为 172.17.0.0/16 或类似范围。

为什么 Swarm 容器有两张网卡,普通容器只有一张?

1. 普通 Docker 容器网络

  • 网络模式:默认使用桥接网络(bridge network,通常是 docker0 桥)。
  • 网卡:只有一个网卡(eth0),IP 从默认子网分配(如 172.17.0.0/16)。
  • 用途:适合单机环境,容器通过 docker0 与主机、其他容器或外部网络通信。
  • 原因:普通容器网络需求简单,默认只连接单一桥接网络,除非手动配置其他网络(如 --network 参数)。

2. Docker Swarm 容器网络

  • 网络模式:默认连接两种网络:
    • Overlay 网络eth0,IP 如 10.0.1.6/24):用于跨主机容器通信,基于 VXLAN 技术,MTU 较小(如 1450)。
    • 桥接网络eth1,IP 如 172.18.0.3/16):通常连接 docker_gwbridge,用于本地主机或外部网络通信,MTU 为 1500。
  • 网卡:两张网卡,分别服务于 overlay 网络和桥接网络。
  • 用途:支持分布式集群,overlay 网络实现跨主机通信,桥接网络确保外部访问。
  • 原因:Swarm 模式为集群设计,自动分配 overlay 网络(即使单机运行)以支持服务发现和负载均衡,同时保留桥接网络以访问主机或公网。

3. 核心差异

  • 普通容器:单机环境,单一桥接网络,网卡数量为 1。
  • Swarm 容器:集群环境,overlay + 桥接网络,网卡数量为 2。
  • Swarm 额外网卡的原因
    • Overlay 网络为跨主机通信提供虚拟网络平面。
    • 桥接网络(docker_gwbridge)确保容器与外部世界的连接。
    • Swarm 的网络模型是为分布式系统设计的,即使单机运行也保留两张网卡。

实际场景对比

  • 普通容器
    • 命令:docker run --rm -it alpine sh
    • 网络:单网卡(eth0),连接 docker0,IP 如 172.17.0.2
    • 场景:单机应用、开发测试。
  • Swarm 容器
    • 命令:docker service create --name my-service alpine sh
    • 网络:双网卡,eth0(overlay,IP 如 10.0.1.6),eth1(桥接,IP 如 172.18.0.3)。
    • 场景:分布式服务、微服务架构。

验证方法

  • 普通容器
    • 查看网络:docker network ls(仅 bridge 网络)。
    • 检查网卡:容器内运行 ip addr show,仅见 loeth0
  • Swarm 容器
    • 查看网络:docker network ls(含 overlaydocker_gwbridge)。
    • 检查网卡:容器内运行 ip addr show,见 loeth0(overlay)、eth1(桥接)。

总结

普通 Docker 容器因单机环境需求简单,默认只有一张网卡(eth0),连接桥接网络。Docker Swarm 容器为支持集群通信,默认有两张网卡:eth0 用于 overlay 网络(跨主机通信),eth1 用于桥接网络(本地/外部通信)。这是 Swarm 网络模型为分布式系统设计的必然结果,即使在单机 Swarm 中也保留此配置。

http://www.xdnf.cn/news/406.html

相关文章:

  • RTMP握手流程
  • 18、TimeDiff论文笔记
  • 用usb网卡 虚拟机无法开到全双工的解决办法
  • CUDA编程中影响正确性的小细节总结
  • mysql的函数(第一期)
  • [每周一更]-(第140期):sync.Pool 使用详解:性能优化的利器
  • 【漫话机器学习系列】211.驻点(Stationary Points)
  • opencv--图像处理
  • [密码学基础]GMT 0029-2014签名验签服务器技术规范深度解析
  • 性能比拼: Elixir vs Go(第二轮)
  • [密码学基础]密码学发展简史:从古典艺术到量子安全的演进
  • 免费多平台运行器,手机畅玩经典主机大作
  • 【数据结构】励志大厂版·初阶(复习+刷题)单链表
  • 简单线段树的讲解(一点点的心得体会)
  • 开发基于python的商品推荐系统,前端框架和后端框架的选择比较
  • 碰一碰发视频系统源码搭建全解析:定制化开发
  • php多种方法实现xss过滤
  • linux oracle 19c 静默安装
  • 5G 毫米波滤波器的最优选择是什么?
  • Java核心技术卷第三章
  • [特殊字符] Kotlin与C的类型别名终极对决:typealias vs typedef,如何让代码脱胎换骨?
  • linux之文件系统
  • JavaWeb 课堂笔记 —— 14 Mybatis
  • 在VMware Workstation 17 Pro上实现Windows与UOS虚拟机之间复制粘贴文本及文件
  • PHP怎样判断浏览器类型和浏览器语言?
  • ESB —— 企业集成架构的基石:功能、架构与应用全解析
  • MOPSO实现无人机多目标路径规划(Matlab完整源码和数据)
  • Android 应用wifi direct连接通信实现
  • P3916 图的遍历
  • C语言学习之预处理指令