Docker网络中bridge和veth的关系

Docker网络中bridge和veth的关系

在我的 Ubuntu 22.04 主机上,我使用桥接驱动程序创建了一个 Docker 网络,并在该网络中启动了一个容器。

在我的主机上运行ip addr,​​我看到这两个界面:

5: br-fc7599764562: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
    link/ether 02:42:d4:4f:b9:39 brd ff:ff:ff:ff:ff:ff
    inet 172.21.0.1/16 brd 172.21.255.255 scope global br-fc7599764562
        valid_lft forever preferred_lft forever
    inet6 fe80::42:d4ff:fe4f:b939/64 scope link
        valid_lftforever preferred_lft forever
6: vethe6879a0@if14: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br-fc7599764562 state UP group default
    link/ether e2:e8:0f:5b:37:a0 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet6 fe80::e0e8:fff:fe5b:37a0/64 scope link
        valid_lft forever preferred_lft forever

显然,这两个接口是相关的,因为第二个接口将第一个接口列为“主接口”。有什么关系?

这个问题的一些背景信息:我实际上有两个 Docker 网络,每个网络中都有一个容器。使用 iptables,我已经在它们之间设置NAT(或者,至少,我认为我已经做到了)并且正在尝试从一个容器对另一个容器进行 ping 操作。在主机上运行 Wireshark,我看到 ICMP 数据包从网桥接口进入并从 veth 接口(而不是另一个网桥)出去。

答案1

桥接设备是一个虚拟交换机。接口veth是一条虚拟以太网电缆,将容器连接到“交换机”:当您创建 veth 设备时,您会获得两个接口; Docker 将一个接口放入容器内(即成为eth0容器内的接口),设备的另一端连接到桥接器。

本文有关于 veth 设备的一些附加详细信息以及各种其他虚拟接口类型的总体概述。

相关内容