我有一个由两个容器组成的 Docker Compose 设置(不过一旦解决了当前问题,我将添加更多容器)。我在装有 Docker24.0.7
和 Docker Compose 的Linux Mint 机器上运行它2.21.0
。
网络通信要求是:
- 容器可以相互通信
- 容器可以与我的家庭子网上的其他设备通信。这是因为我的家庭子网上有另一个硬件设备,由其中一个容器使用
- 主机可以与容器通信。这是因为其中一个容器通过 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 都无法以以太网作为父级工作。