🗣️技术闲聊
未读
解决 WebRTC ICE 连接失败:Docker Desktop 中部署 WebRTC 无法穿透并建立完整连接
本文记录了在部署 MuseTalk 实时语音系统时遇到的一个关键问题:WebRTC ICE 连接始终停留在 checking 阶段,最终 failed,无法建立 P2P 媒体通道。经过分析发现,问题源于 Windows + Docker Desktop 的 NAT 网络模型:容器生成的候选地址为私有 IP,无法通过公网访问;即使端口映射,也只能支持 TCP,不满足 WebRTC 对 UDP 和动态端口的需求。此外,仅配置 Google STUN 而没有 TURN 中继,也进一步导致穿透失败。
为解决这一问题,最终采用了 WSL2 + Ubuntu + Docker CE 的方案。在该环境中运行容器时,可启用 --network host,使容器直接共享宿主机网络,暴露真实公网 IP 与 UDP 端口,从而保证 STUN 返回的候选地址可达,成功完成 ICE 协商并进入 connected 状态。文章同时给出了详细的环境搭建步骤,包括 WSL2 安装、Docker CE 部署、GPU 支持配置以及容器运行与调试命令。