运行ObserveRTC示例时遇Mediasoup错误:getaddrinfo ENOTFOUND host.docker.internal
解决host.docker.internal DNS解析失败问题
问题原因
host.docker.internal 是Docker Desktop(Windows/macOS)自动配置的域名,用于容器访问宿主机,但Linux环境下的Docker默认不会自动配置该域名,因此容器内的应用无法解析这个地址,出现ENOTFOUND错误。
解决方案
方案1:修改docker-compose.yml添加额外主机映射
在你的docker-compose.yml中,找到MediaSoup相关的服务配置块,添加extra_hosts字段,将host.docker.internal映射到你的宿主机IP(192.168.60.79):
services: # 对应MediaSoup相关服务配置 mediasoup: # 保留原有配置... extra_hosts: - "host.docker.internal:192.168.60.79"
修改完成后,重新执行启动命令:
SFU_ANNOUNCED_IP="192.168.60.79" docker-compose up
方案2:全局配置Docker守护进程支持该域名
如果需要所有容器都能解析host.docker.internal,可以修改Docker守护进程配置:
- 编辑(或创建)
/etc/docker/daemon.json文件:
{ "extra_hosts": ["host.docker.internal:192.168.60.79"] }
- 重启Docker服务生效:
sudo systemctl restart docker
方案3:临时手动修改容器hosts(重启失效,仅测试用)
如果只是临时验证,可以进入运行中的MediaSoup容器,手动添加hosts条目:
# 替换<container-id>为你的MediaSoup容器ID docker exec -it <container-id> /bin/bash echo "192.168.60.79 host.docker.internal" >> /etc/hosts
内容的提问来源于stack exchange,提问作者rostamiani
相关产品推荐
相关产品推荐

