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

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 中也保留此配置。

相关文章:

  • 命令update-alternatives
  • 关于数字信号与图像处理——基于Matlab的图像增强技术
  • vue3 watch和watchEffect 的用法和区别
  • 【T型三电平仿真】SVPWM调制
  • MCS-51单片机汇编语言编程指南
  • 黑马商城(五)微服务保护和分布式事务
  • PHP异常处理__RuntimeException运行时错误
  • ZLMediaKit流媒体服务器
  • c++:线程(std::thread)
  • PHP中的ReflectionClass讲解【详细版】
  • GPT-SoVITS 使用指南
  • Linux网络服务之防火墙
  • Datawhale AI春训营 世界科学智能大赛--合成生物赛道:蛋白质固有无序区域预测 小白经验总结
  • (附邀请码)探秘扣子空间:排盘优美,魅力无限
  • C#学习第17天:序列化和反序列化
  • 数据结构0基础学习堆
  • PHP获取大文件行数
  • 实现Azure Function安全地请求企业内部API返回数据
  • springAi---智能客服
  • Python语法系列博客 · 第4期[特殊字符] 函数的定义与使用:构建可复用的模块
  • 蚌埠一动物园用染色犬扮熊猫引争议,园方回应:被投诉已撤走
  • 周继红连任中国跳水协会主席
  • A股三大股指涨跌互现:黄金股再度走强,两市成交10900亿元
  • 神舟二十号任务完成最后一次全区合练,发射场做好发射前各项准备
  • 上海与丰田汽车签署战略合作协议,雷克萨斯纯电动汽车项目落子金山
  • 中纪委驻中组部纪检监察组原组长李刚被捕