docker 个容器可以连接到 SRIOV 虚拟功能吗?

Can docker containers be connected to SRIOV virtual functions?

如果能够使用现有的支持 SR-IOV 的 NIC,那就太棒了。我想了解是否可以将 docker 容器附加到虚拟功能,以便它们通过 NIC 硬件桥(而不是虚拟 docker0 桥)进行通信。

更具体地说,考虑这种情况:
容器 A 附加到 VF#1
容器 B 附加到 VF#2

A 和 B 链接在一起,当它们交换数据时,应该通过 NIC 上的硬件桥接(而不是 docker0)。

docker 是否原生支持以上内容?

如果没有,管道工程可以帮忙吗? (我听说管道可以做很多神奇的事情)

例子会很有帮助。

好吧,我想在管道脚本中稍加修改就可以让我们将 VF 附加到容器。以这种方式设置的容器能够相互 ping 通,而无需创建 macvlan 子接口或软件桥接。这表明适配器中的硬件桥正在为它们进行 L2 切换。

管道的变化基本上是这样的:

[ "$IFTYPE" = phys ] && {
  [ "$VLAN" ] && {
    [ ! -d "/sys/class/net/${IFNAME}.${VLAN}" ] && {
      ip link add link "$IFNAME" name "$IFNAME.$VLAN" mtu "$MTU" type vlan id "$VLAN"
    }
    ip link set "$IFNAME" up
    IFNAME=$IFNAME.$VLAN
  }
  # Let's not create the macvlan subinterface
  # GUEST_IFNAME=ph$NSPID$CONTAINER_IFNAME
  # ip link add link "$IFNAME" dev "$GUEST_IFNAME" mtu "$MTU" type macvlan mode bridge
  GUEST_IFNAME=$IFNAME
  ip link set "$IFNAME" up
}

ip link set "$GUEST_IFNAME" netns "$NSPID"
ip netns exec "$NSPID" ip link set "$GUEST_IFNAME" name "$CONTAINER_IFNAME"
---

当然,一种更简洁的方法是向脚本添加一个新参数(“--direct-attach”或其他东西)以区别对待指定接口