是的,你提到的命令只映射了 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 默认的 external profile 会使用 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

替代方案与建议

  1. 使用 Host 网络模式:对于生产环境或完整功能部署,许多经验丰富的用户会采用 --net=host 模式。这能让容器直接使用宿主机的网络栈,避免复杂的端口映射和潜在的性能问题。命令示例:

    docker run -d --name freeswitch --net=host --cap-add SYS_NICE freeswitch/freeswitch
    
  2. 检查镜像文档freeswitch/freeswitch 这个官方镜像的默认配置和端口可能与其社区衍生版不同。最可靠的方法是查阅该镜像在 Docker Hub 上的具体说明,确认其暴露的端口和配置方式。

你遇到的这个错误信息 Client.Timeout exceeded while awaiting headers,是 Docker 从官方仓库拉取镜像时,网络连接超时导致的,这是在国内很常见的问题。

根本原因在于 Docker Hub 的服务器在国外,国内网络访问时可能会比较慢或不稳定。别担心,解决方法很简单,最推荐的就是配置国内镜像加速器

💡 如何配置镜像加速

你可以参考下面的步骤,为 Docker 配置一个国内镜像源。

  1. 获取加速器地址
    你可以选择使用一些公共的镜像加速服务(可能不太稳定),或者推荐注册一个阿里云或腾讯云的账号,获取一个专属的加速地址,这样最稳定,通常也是免费的。

  2. 修改 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 按钮,让配置生效。
  3. 再次尝试拉取
    配置生效后,重新执行你之前的 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
Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐