我正在 Linux 笔记本电脑上工作,我使用 docker 容器进行开发,并在本地 docker 引擎上运行它们(即只是docker compose up -d
)。
我注意到,如果我docker compose down
在进行视频通话时这样做,Google Meet 通话就会中断。我有一个非常典型的 docker compose 设置(两个容器,一个网络)。主机上的呼叫几乎每次都会因音频/视频而中断,但肯定总是会终止屏幕共享。
这种情况在 Firefox 121 和 Firefox Aurora (122.0b5) 上都会发生,但在 Chrome 或 Chromium 上不会发生。
为什么我的通话会被挂断?
我怀疑 NetworkManager 正在对 docker 网络更改做出反应,因此我通过添加到我的 NM 配置来确保 docker 相关接口始终“不受管理”:
[keyfile]
unmanaged-devices=interface-name:docker*;interface-name:veth*;interface-name:br-*
...但问题仍然存在。
我使用的是 Debian 12、Linux 6.5、Docker 24。
答案1
Chrome 和 Firefox WebRTC 堆栈使用交互式连接建立 (ICE) 的方式有所不同。
两种浏览器都维护一个用于通信的“ICE 候选者”列表。 Chrome 仅使用默认网络接口(默认路由的接口,即您的 wlan 或 eth 适配器接口)中的候选者。相比之下,Firefox 默认考虑所有接口,包括docker 生成的br-*
和veth*
。
为了避免 Firefox 中的 WebRTC 问题,您可以将其配置为忽略非默认接口。通过特殊的about:config
URL,只需设置media.peerconnection.ice.default_address_only
为true
.
文档很少,但来自这个 Mozilla 维基我们看到影响候选生成的不同 ICE 设置,特别是:
media.peerconnection.ice.default_address_only
-boolean
(默认false
)——仅将 ICE 候选限制为默认接口。
- 用于一般路由的默认接口被识别,并且仅该地址用于候选生成......
注意:此设置与 VPN 结合使用可能会产生负面影响。