
这是一款最小化的官方 FreeSwitch Docker 容器,支持在 host、bridge 及 swarm 网络环境中运行。容器体积精简至 149MB(压缩后 62MB),并在安全性上做了以下优化:
容器运行时支持通过以下环境变量进行配置:
SOUND_RATES指定需下载安装的声音文件采样率,可选值为 8000、16000、32000、48000。如需指定多个值,用分号分隔,例如:
SOUND_RATES=8000:16000
SOUND_TYPES指定需下载安装的声音文件类型,可选值包括:music(音乐)、en-us-callie(美式英语-Callie 语音)、en-us-allison(美式英语-Allison 语音)、ru-RU-elena(俄语-Elena 语音)、en-ca-june(加拿大英语-June 语音)、fr-ca-june(加拿大法语-June 语音)、pt-BR-karina(巴西葡萄牙语-Karina 语音)、sv-se-jakob(瑞典语-Jakob 语音)、zh-cn-sinmei(中文普通话- Sinmei 语音)、zh-hk-sinmei(中文粤语- Sinmei 语音)。例如:
SOUND_TYPES=music:en-us-callie
EPMD控制是否启动 epmd 守护进程(用于 mod_erlang 和 mod_kazoo 模块),可选值 true(启动)或 false(不启动)。
DUMPCAP控制是否启动 dumpcap 守护进程(用于 VoIP 故障排查和呼叫监控的抓包),可选配置:
true:使用默认参数启动,抓包选项为 -i any -p -t -q -b duration:3600 -b files:48 -w /dumpcap/packets.pcap,PCAP 文件保存至容器内 /dumpcap 目录;false:不启动;-i eth0 -w /custom/path.pcap)。若需使用 FreeSwitch 的 MOH(音乐保持)或其他声音文件,需先创建存储卷;无需时可跳过此步:
shdocker volume create --name freeswitch-sounds
通过 docker run 命令启动容器,示例如下(根据实际需求调整参数):
shdocker run --net=host --name freeswitch \ -e SOUND_RATES=8000:16000 \ # 指定采样率 -e SOUND_TYPES=music:en-us-callie \ # 指定声音类型 -v freeswitch-sounds:/usr/share/freeswitch/sounds \ # 挂载声音文件卷 -v /etc/freeswitch/:/etc/freeswitch \ # 挂载本地配置目录(替换为实际路径) safarov/freeswitch # 镜像名称
可通过 systemd 管理容器的启停,以下是两种网络模式的服务文件配置(适用于 Docker 主机)。
将服务文件保存至 /etc/systemd/system/freeswitch-docker.service,然后通过以下命令启用并启动:
shsystemctl start freeswitch-docker.service # 启动服务 systemctl enable freeswitch-docker.service # 设置开机自启
sh[Unit] Description=freeswitch Container After=docker.service network-online.target Requires=docker.service [Service] Restart=always TimeoutStartSec=0 # 合并 ExecStart/ExecStop 为单行,避免部分 systemd 版本 bug ExecStart=/bin/sh -c 'docker rm -f freeswitch; \ docker run -t --net=host --name freeswitch \ -e SOUND_RATES=8000:16000 \ -e SOUND_TYPES=music:en-us-callie \ -v freeswitch-sounds:/usr/share/freeswitch/sounds \ -v /etc/kazoo/freeswitch/:/etc/freeswitch \ # 替换为实际配置目录 freeswitch' # 替换为实际镜像名称 ExecStop=-/bin/sh -c '/usr/bin/docker stop freeswitch; \ /usr/bin/docker rm -f freeswitch;' [Install] WantedBy=multi-user.target
sh[Unit] Description=freeswitch Container After=docker.service network-online.target Requires=docker.service [Service] Restart=always TimeoutStartSec=0 # 合并 ExecStart/ExecStop 为单行,避免部分 systemd 版本 bug ExecStart=/bin/sh -c 'docker rm -f freeswitch; \ docker run -t --network bridge --name freeswitch \ -p 5060:5060/udp -p 5060:5060 \ # 映射 SIP 端口 -e SOUND_RATES=8000 \ -e SOUND_TYPES=music:en-us-callie \ -v freeswitch-sounds:/usr/share/freeswitch/sounds \ -v /etc/freeswitch/:/etc/freeswitch \ # 替换为实际配置目录 safarov/freeswitch' # 镜像名称 # 启动后配置 iptables,转发 RTP 端口(17000-17999) ExecStartPost=/bin/sh -c 'sleep 5; \ IP_ADDR=$(docker inspect -f "{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}" freeswitch); \ /sbin/iptables -A DOCKER -t nat -p udp ! -i docker0 --dport 17000:17999 -j DNAT --to $IP_ADDR:17000-17999; \ /sbin/iptables -A DOCKER -p udp ! -i docker0 -o docker0 -d $IP_ADDR --dport 17000:17999 -j ACCEPT' # 停止时清理 iptables 规则 ExecStop=-/bin/sh -c 'IP_ADDR=$(docker inspect -f "{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}" freeswitch); \ /sbin/iptables -D DOCKER -t nat -p udp ! -i docker0 --dport 17000:17999 -j DNAT --to $IP_ADDR:17000-17999; \ /sbin/iptables -D DOCKER -p udp ! -i docker0 -o docker0 -d $IP_ADDR --dport 17000:17999 -j ACCEPT; \ /usr/bin/docker stop freeswitch; \ /usr/bin/docker rm -f freeswitch;' [Install] WantedBy=multi-user.target
为方便通过 fs_cli 管理 FreeSwitch,可在 .bashrc 文件中添加别名:
shalias fs_cli='docker exec -i -t freeswitch /usr/bin/fs_cli' # "freeswitch" 为容器名称
保存后执行 source ~/.bashrc 使别名生效,之后直接输入 fs_cli 即可进入容器内的 FreeSwitch 控制台。
该容器基于 scratch 镜像构建,通过添加打包为 tar.gz 的必要 FreeSwitch 文件实现。自定义构建步骤如下:
shapt-get install freeswitch-conf-vanilla # 安装 FreeSwitch 基础配置包
shgit clone [***] # 克隆源码
shcd freeswitch/docker/base_image # 进入脚本目录 ./make_min_archive.sh # 执行归档生成脚本
shdocker build -t freeswitch_custom . # "freeswitch_custom" 为自定义镜像名称
官方 FreeSwitch 容器 Dockerfile
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 版本下载页面。
探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
无需登录使用专属域名
Kubernetes 集群配置 Containerd
K3s 轻量级 Kubernetes 镜像加速
VS Code Dev Containers 配置
Podman 容器引擎配置
HPC 科学计算容器配置
ghcr、Quay、nvcr 等镜像仓库
Harbor Proxy Repository 对接专属域名
Portainer Registries 加速拉取
Nexus3 Docker Proxy 内网缓存
需要其他帮助?请查看我们的 常见问题Docker 镜像访问常见问题解答 或 提交工单
manifest unknown
no matching manifest(架构)
invalid tar header(解压)
TLS 证书失败
DNS 超时
410 Gone 排查
402 与流量用尽
401 认证失败
429 限流
D-Bus 凭证提示
413 与超大单层
来自真实用户的反馈,见证轩辕镜像的优质服务