为什么当网络父级是 WiFi 时,我的 Docker 主机可以访问 ipvlan 上的容器,但当网络父级是以太网时则不能?

为什么当网络父级是 WiFi 时,我的 Docker 主机可以访问 ipvlan 上的容器,但当网络父级是以太网时则不能?

我有一个由两个容器组成的 Docker Compose 设置(不过一旦解决了当前问题,我将添加更多容器)。我在装有 Docker24.0.7和 Docker Compose 的Linux Mint 机器上运行它2.21.0

网络通信要求是:

  1. 容器可以相互通信
  2. 容器可以与我的家庭子网上的其他设备通信。这是因为我的家庭子网上有另一个硬件设备,由其中一个容器使用
  3. 主机可以与容器通信。这是因为其中一个容器通过 HTTP 公开了一个设置接口

根据我使用有线还是无线连接,以及我是否使用macvlan网络ipvlan,我会得到以下不同的行为:

连接类型 网络类型 容器间通信 容器到子网通信 主机到容器通信
有线 macvlan 作品 作品 失败
有线 ipvlan 作品 作品 失败
无线的 macvlan 作品 失败 失败
无线的 ipvlan 作品 作品 作品

虽然我找到了一种可行的组合(无线与ipvlan),但出于实际原因,我还是想使用有线连接。

我并不是一个真正擅长网络的人,并且很难理解我观察到的行为差异。我特别困惑为什么ipvlan无线连接可以按预期工作,而有线连接却不行。有人能告诉我为什么会这样吗,我如何通过有线连接满足我的要求?

compose.yaml以下是我展示如何定义我的网络的相关部分:

  my-network:
    driver: ${NETWORK_DRIVER:?specify the type of network driver to use}
    driver_opts:
      parent: ${NETWORK_PARENT:?specify the name of the physical network upon which the Docker stack's network will be based}
    ipam:
      config:
        - subnet: 192.168.10.0/24
          gateway: 192.168.10.1

为避免疑问:我根据驱动程序是否是macvlan或传入正确的网络父级ipvlan,并已在 Docker 堆栈创建后确认它。

更新:情况变得更奇怪了。事实证明,为了让 ipvlan 网络通过 WiFi 工作,我还必须有一个活动的以太网连接。一旦我禁用以太网,我的主机就无法再访问容器。此外,无论是否启用 WiFi,ipvlan 都无法以以太网作为父级工作。

相关内容