使用 Macvlan 的容器间歇性失联

2023-10-16 16:08:49 +08:00
 libook

一台 PC 作为家用服务器使用,上面使用 Docker 跑了若干容器。

由于防火墙和透明代理配置的需要,需要部分容器使用独立 IP 来跑,并在相关规则中添加这些 IP 的规则。 于是我开始使用 Docker 提供的 macvlan 功能,创建了一个 macvlan 类型的 network ,相关容器配置使用这个 network ,并指定独立 IP 。

容器创建出来后是可以按照预期运行的,在其他设备访问这些 IP 也都可以正确访问到这些容器。

问题是在这些容器开始建立一些网络连接后,这些容器就会变得不可访问,直到连接断开才重新恢复访问。容器本身的运行状态正常(无闪退、死机)。其他非 macvlan 容器访问正常。

举个例子,用容器跑 aria2 或 transmission ,没有任务的时候可以正常访问,添加任务后,当任务与一定数量节点建立联系后,aria2 或 transmission 的 RPC API 就无法访问,直到任务完成后又恢复访问。

不光从容器外部访问会失联,使用 docker exec 进入到正在运行的容器内部,执行 curl 127.0.0.1 也会失联或延迟数十秒返回结果。

如何排查问题可能出在哪?

系统情况:

734 次点击
所在节点    Docker
10 条回复
zljklang
2023-10-30 15:20:44 +08:00
用网桥
libook
2023-10-30 16:42:05 +08:00
@zljklang #1 可以具体说明配置什么样的网桥吗?
因为需要独立 IP ,所以没有使用 docker 默认的网桥网络,而是用了 macvlan ,我需要确保从外面用容器自己的 IP 访问容器。
zljklang
2023-10-31 09:30:53 +08:00
docker network create kind -o com.docker.network.bridge.default_bridge=true -o com.docker.network.bridge.enable_icc=true -o com.docker.network.bridge.enable_ip_masquerade=true -o com.docker.network.bridge.host_binding_ipv4=0.0.0.0 -o com.docker.network.bridge.name=vmbr0 -o com.docker.network.driver.mtu=1500 --driver bridge --subnet 192.168.3.33/27 --gateway 192.168.3.254
zljklang
2023-10-31 09:33:36 +08:00
先手动命令新建网桥 vmbr0 ,在执行上面这个命令,--gateway 网关就填网桥 ip
libook
2023-10-31 11:10:34 +08:00
@zljklang #3 还没试,有两个疑问:
1. 我需要容器拥有一个与宿主机并列的独立 IP ,因为路由器要根据这个独立 IP 来添加规则,不能用 docker 宿主机的 IP ,否则会把宿主机上其他使用网桥的容器也一并按规则处理了。这个指令看起来是在 docker 宿主机内部创建了一个子网,是不是说最终还是是的使用 docker 宿主机的 IP+容器端口来访问容器?
2. 在宿主机上执行 docker exec 进入容器内部,在容器内部 curl 容器上服务进程所监听的端口( 127.0.0.1:端口号),依然会出现与外部访问一样的失联问题,我理解在容器内部访问容器本地端口应该是走的容器内的 lo interface ,而不是任何其他宿主机上创建的网桥或 macvlan ,依然会出现失联问题的话,会不会是更底层的网络管理或实现方面的问题?
libook
2023-10-31 11:11:59 +08:00
@zljklang 我路由器是个独立硬件设备,不运行在 docker 宿主机上。
zljklang
2023-10-31 11:18:49 +08:00
会分到路由器给的 IP ,路由器上也能看到 ip
zljklang
2023-10-31 11:20:06 +08:00
或者可以不用改,直接在路由上添加静态路由也可以直接访问容器 ip ,这个要在宿主机上开启包转发功能。
zljklang
2023-10-31 11:27:24 +08:00
那是不是是你服务的问题,curl 127.0.0.1 也有问题
libook
2023-10-31 11:37:39 +08:00
@zljklang #9 试过 Transmission 和 aria2 ,都有这个问题,但以 bridge 网络来跑就没有问题,用 macvlan 跑就有问题,让我不禁怀疑是不是当前内核版本底层的网络实现有 bug 。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/982481

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX