是的,你提到的命令只映射了 SIP 信令端口,对于一个完整可用的 FreeSWITCH 服务来说,通常还需要暴露更多的端口。
根据 FreeSWITCH 的官方文档和社区实践,除了 5060 UDP 端口,还有以下 TCP 和 UDP 端口在特定场景下是必需的。
需要额外暴露的端口
下表整理了除 5060 (UDP) 外,常见的需要暴露的端口及其用途:
| 端口 | 协议 | 用途 | 说明 |
|---|---|---|---|
| 5060 | TCP | SIP 信令 (Internal Profile) | 官方文档显示 SIP 同时支持 TCP 和 UDP,因此 TCP 5060 也需要映射。 |
| 5080 | TCP & UDP | SIP 信令 (External Profile) | FreeSWITCH 默认的externalprofile 会使用 5080 端口,用于处理来自外部或公网的 SIP 请求。 |
| 8021 | TCP | Event Socket (ESL) | 这是非常重要的管理端口。用于fs_cli等客户端连接,以执行控制台命令、监控系统状态等。 |
| 5066 | TCP | WebSocket 信令 | 为 WebRTC 等基于 Web 的客户端提供 SIP over WebSocket 服务。 |
| 7443 | TCP | WebSocket 信令 (安全) | 基于 TLS 的安全 WebSocket 信令端口。 |
| 16384-32768 | UDP | RTP/RTCP 媒体流 | 核心端口范围。用于传输语音、视频等实时媒体数据。这是大范围端口,在 Docker 中映射需要特别处理。 |
注:不同的 Docker 镜像(如
chatopera/freeswitch等)列出的默认端口范围可能略有不同,比如有的镜像使用64535-65535/udp作为媒体端口。
如何修改启动命令
你可以参考下面的命令,将上述关键端口一并映射。请注意,大范围 UDP 端口的映射可能会消耗较多内存并导致启动变慢,以下是一个示例:
docker run-d--name freeswitch `-p 5060:5060/udp-p 5060:5060/tcp `-p 5080:5080/udp-p 5080:5080/tcp `-p 8021:8021/tcp `-p 5066:5066/tcp `-p 7443:7443/tcp `-p 16384-32768:16384-32768/udp ` hangzhou.aliyuncs.com/bytedesk/freeswitch:latest替代方案与建议
使用 Host 网络模式:对于生产环境或完整功能部署,许多经验丰富的用户会采用
--net=host模式。这能让容器直接使用宿主机的网络栈,避免复杂的端口映射和潜在的性能问题。命令示例:docker run-d--name freeswitch--net=host--cap-add SYS_NICE freeswitch/freeswitch检查镜像文档:
freeswitch/freeswitch这个官方镜像的默认配置和端口可能与其社区衍生版不同。最可靠的方法是查阅该镜像在 Docker Hub 上的具体说明,确认其暴露的端口和配置方式。
你遇到的这个错误信息Client.Timeout exceeded while awaiting headers,是 Docker 从官方仓库拉取镜像时,网络连接超时导致的,这是在国内很常见的问题。
根本原因在于 Docker Hub 的服务器在国外,国内网络访问时可能会比较慢或不稳定。别担心,解决方法很简单,最推荐的就是配置国内镜像加速器。
💡 如何配置镜像加速
你可以参考下面的步骤,为 Docker 配置一个国内镜像源。
获取加速器地址
你可以选择使用一些公共的镜像加速服务(可能不太稳定),或者推荐注册一个阿里云或腾讯云的账号,获取一个专属的加速地址,这样最稳定,通常也是免费的。修改 Docker 配置
- Windows (Docker Desktop):右键点击系统托盘中的 Docker 图标,选择Settings->Docker Engine。
- 在打开的 JSON 配置文件中,加入或修改
registry-mirrors项。例如,填入你获取到的阿里云加速地址:
如果你还没有专属地址,也可以先尝试用下面这个公共的试试看:{"registry-mirrors":["https://<你的专属ID>.mirror.aliyuncs.com"]}{"registry-mirrors":["https://registry.docker-cn.com"]} - 点击Apply & Restart按钮,让配置生效。
再次尝试拉取
配置生效后,重新执行你之前的docker run命令,应该就能成功拉取镜像了。
🔧 备选方案
如果配置加速器后问题仍然存在,可以考虑:
- 检查网络:确保你的网络连接稳定,可以尝试
ping registry-1.docker.io看看连通性。 - 使用其他镜像:有开发者提供了部署在国内的 FreeSWITCH 镜像,也可以尝试直接拉取,例如:
docker pull registry.cn-hangzhou.aliyuncs.com/bytedesk/freeswitch:latest。
没问题,下面是完整的一行命令(Windows PowerShell 中直接粘贴即可):
docker run-d--name freeswitch-p 5060:5060/udp-p 5060:5060/tcp-p 5080:5080/udp-p 5080:5080/tcp-p 8021:8021/tcp-p 5066:5066/tcp-p 7443:7443/tcp-p 16384-32768:16384-32768/udp registry.cn-hangzhou.aliyuncs.com/bytedesk/freeswitch:latest如果要进入 FreeSWITCH 控制台验证,用这个一行命令:
docker exec-it freeswitch fs_cli如果只想快速体验,不想映射那么多端口,可以简化为:
docker run-d--name freeswitch-p 5060:5060/udp-p 5060:5060/tcp-p 8021:8021/tcp-p 16384-32768:16384-32768/udp registry.cn-hangzhou.aliyuncs.com/bytedesk/freeswitch:latest