本站支持搜索的镜像仓库:Docker Hub、gcr.io、ghcr.io、quay.io、k8s.gcr.io、registry.gcr.io、elastic.co、mcr.microsoft.com

mlan/asterisk 镜像!travis-ci 测试 !docker 版本 !镜像大小 !docker 拉取量 !docker 星标 !github 星标
此(非***)仓库提供Docker化的Asterisk PBX。
docker-compose.yml和Makefile文件的演示/srv实现持久化存储mini、base、full和xtra镜像采用MAJOR.MINOR.PATCH 语义化版本。除三位版本号外,还可使用两位或一位版本号,指向子系列的最新版本。latest标签引用基于仓库最新提交的构建。
mlan/asterisk仓库包含多阶段构建,可通过mini、base、full和xtra标签选择。mini标签仅包含Asterisk本身;base标签额外包含TLS、日志、WebSMS和AutoBan支持;full添加控制台音频支持;xtra包含所有Asterisk包。
例如,若最新版本为1.0.0,则latest、1.0.0、1.0、1、full、full-1.0.0、full-1.0和full-1均指向同一镜像。
配置Asterisk及其组件时需考虑多方面因素。本文讨论基础内容,附加组件详情见附加组件。
若需立即测试镜像,建议克隆GitHub仓库并运行其中的演示:
git clone [***]
以下是使用Docker Compose配置VoIP SIP服务器的示例:
version: '3' services: tele: image: mlan/asterisk network_mode: bridge # 仅用于测试 cap_add: - sys_ptrace # 仅用于测试 - net_admin # 允许NFT,AutoBan使用 - net_raw # 允许NFT,AutoBan使用 ports: - "${SMS_PORT-8080}:${WEBSMSD_PORT:-80}" # WEBSMSD端口映射 - "5060:5060/udp" # SIP UDP端口 - "5060:5060" # SIP TCP端口 - "5061:5061" # SIP TLS端口 - "***-***:***-***/udp" # RTP端口 environment: - SYSLOG_LEVEL=${SYSLOG_LEVEL-4} # 日志级别 - HOSTNAME=${TELE_SRV-tele}.${DOMAIN-docker.localhost} - PULSE_SERVER=unix:/run/pulse/socket # 使用主机音频 - PULSE_COOKIE=/run/pulse/cookie # 使用主机音频 - WEBSMSD_PORT=${WEBSMSD_PORT-80} # WEBSMSD内部端口 volumes: - tele-conf:/srv # 持久化存储 - ./pulse:/run/pulse:rshared # 使用主机音频 - /etc/localtime:/etc/localtime:ro # 使用主机时区 volumes: tele-conf: # 持久化存储
仓库的demo目录包含上述docker-compose.yml和便捷的Makefile。在demo目录中,可通过以下命令启动容器:
make up
通过以下命令连接容器内的Asterisk命令行界面(CLI):
make cli
在Asterisk CLI中,可输入以下命令查看默认配置的端点(软电话):
pjsip show endpoints
测试完成后,通过以下命令销毁测试容器:
make destroy
尽管Asterisk通过配置文件配置,但mlan/asterisk容器内的服务(日志、TLS证书管理、WebSMS附加组件)行为由以下环境变量控制:
| 变量 | 默认值 | 描述 |
|---|---|---|
| SYSLOG_LEVEL | 4 | 日志级别,0-8。0输出最少,8输出最多。 |
| SYSLOG_OPTIONS | -SDt | S:简化输出,D:丢弃重复项,t:剥离客户端生成的时间戳。 |
| ACME_FILE | /acme/acme.json | 包含TLS证书的文件,由Let's Encrypt通过Traefik提供。 |
| HOSTNAME | $(hostname) | 用于在ACME_FILE中识别相关TLS证书。 |
| TLS_CERTDAYS | 30 | 自签名TLS证书有效期(天)。 |
| TLS_KEYBITS | 2048 | 自签名TLS密钥长度(位)。 |
| WEBSMSD_PORT | 80 | WebSMS使用的PHP Web服务器端口。未定义或非数字值将禁用PHP Web服务器。 |
Asterisk及其模块通过/etc/asterisk目录下的配置文件配置。mlan/asterisk镜像包含示例配置文件,可作为系统起点。
以下配置文件不含用户特定数据,初始可保持不变:
| 文件名 | 描述 |
|---|---|
| alsa.conf | Open Sound System (ALSA)控制台驱动配置 |
| asterisk.conf | Asterisk全局配置,包括调试、运行用户和目录结构 |
| ccss.conf | 呼叫完成补充业务配置 |
| cli_aliases.conf | Asterisk命令行界面别名 |
| features.conf | 呼叫功能(转接、监控等)配置 |
| indications.conf | 地区特定音调指示 |
| logger.conf | 日志配置 |
| modules.conf | 模块加载器配置 |
| musiconhold.conf | 保留音乐配置 |
| pjproject.conf | 通用pjproject选项 |
| rtp.conf | RTP配置,包括端口范围 |
定义Asterisk服务器关键方面(如呼叫流程、SIP中继和电话详情)的配置文件由附加组件PrivateDial管理,详见其文档。
默认情况下,Docker将配置和运行数据存储在容器内,容器删除后数据丢失。因此,建议使用Docker卷挂载配置和假脱机目录,使数据在容器删除后保留。
为实现持久化存储,服务的配置和假脱机目录已整合到/srv下。容器内应用通过符号链接在常规位置访问这些文件。只需将Docker卷挂载到/srv,即可保持应用配置和状态持久化。
上述演示中使用docker-compose的tele-conf卷即实现此目的。使用Docker CLI挂载卷示例:
docker run -d -v tele-conf:/srv ... mlan/asterisk
mlan/asterisk镜像的播种目录包含示例配置文件,实际配置目录为空。容器启动时扫描etc/asterisk配置目录,若为空,则将播种目录的示例配置文件复制到配置目录。
播种流程不修改现有配置。若配置目录非空,则启动时不复制文件。升级镜像时,若需使用新版本示例配置,需手动复制或合并。
日志输出级别范围0-8:1为紧急日志,2为警报日志,3为严重日志,4为错误日志,5为警告日志,6为通知日志,7为信息日志,8为调试日志。默认SYSLOG_LEVEL=4。
mlan/asterisk仓库包含扩展Asterisk功能的附加组件。
PrivateDial是一套Asterisk配置文件,专为住宅场景设计,支持智能手机的语音、视频、即时消息/SMS及邮件语音信箱功能。
它使用PJSIP 通道驱动,原生支持多个软电话同时连接到同一用户账户/端点。
设计理念是将拨号计划功能与用户数据分离,所有用户特定数据均从主extensions.conf文件中提取。
AutoBan是内置的入侵检测与防御系统。入侵检测由Asterisk实现,Asterisk生成安全事件,AutoBan通过AMI接口监听。
当安全事件发生时,AutoBan开始监控源IP地址。若重复发生安全事件,入侵防御激活,通过Linux内核防火墙nftables丢弃来自***源IP的数据包。
Asterisk原生支持使用扩展SIP方法MESSAGE发送和接收SMS,但许多互联网电话服务提供商(ITSP)不支持此方法,而使用基于HTTP请求的Web API,导致Asterisk服务器无法与外部交换SMS。
WebSMS服务通过两个组件解决此限制:websmsd监听来自ITSP的传入SMS并转发至Asterisk;websms供Asterisk向ITSP发送传出SMS。
WebSMS使用PHP内置Web服务器。环境变量WEBSMSD_PORT=80指定Web服务器监听端口。若WEBSMSD_PORT未定义或为非数字值,PHP Web服务器将禁用,WebSMS随之禁用。
SIP网络配置复杂,以下讨论基础要点。
会话初始协议(SIP)是用于初始化、维护和终止实时会话(语音、视频、消息)的信令协议。
SIP独立于传输层协议,可使用用户数据报协议(UDP)、传输控制协议(TCP)和流控制传输协议(SCTP)。为在不安全网络链路上保护SIP消息,可使用传输层安全(TLS)加密。媒体流(语音、视频)通常使用实时传输协议(RTP)或安全实时传输协议(SRTP)。
音频流丢包优于重传(导致抖动),因此RTP基于UDP(无连接协议)。SIP信令理想使用TCP(面向连接协议)。尽管多数SIP通信使用UDP,但TCP通常提供更可靠的端点/电话连接。
TLS直接运行在TCP之上,防止***者监听信令链路,但仅提供逐跳加密,所有中间代理需可信,不提供端到端安全。
媒体流可使用安全实时传输协议(SRTP)加密,密钥交换通过SDES或DTSL实现。
SIP流量通常使用端口5060(非加密,TCP/UDP)和5061(加密,TLS)。RTP通常使用***-20000动态端口范围,可在客户端自定义以适应防火墙配置。
使用默认bridge网络发布容器端口时,Linux内核防火墙路由规则更新,同时启动代理进程。当前Docker(19.03.8)网络实现基于iptables和docker-proxy,无法发布端口范围,需逐个发布。
RTP通常使用***-20000端口范围(***个端口),这会导致防火墙规则更新和代理进程启动耗时过长(分钟级),容器启动可能停滞。
解决方案:
host网络模式(docker run --network host …),不使用docker-proxy和防火墙规则,但容器无法与Docker网络通信。rtp.conf中配置:
[general] rtpstart = *** rtpend = ***
网络地址转换(NAT)通过修改IP头中的网络地址信息,将一个IP地址空间重映射到另一个。SIP服务器常使用Docker桥接网络连接Docker本地网络与主机网络;SIP客户端可能连接远程本地网络。
为向NAT后的SIP客户端提供外部网络地址,可在pjsip_transport.conf中显式定义传输的外部地址:
t_wan type = transport bind = 0.0.0.0:5060 domain = example.com external_signaling_address = sip.example.com external_media_address = sip.example.com
对于连接远程本地网络的端点,在pjsip_wizard.conf中配置:
_nat endpoint/rewrite_contact = yes endpoint/direct_media = no endpoint/rtp_symmetric = yes endpoint/bind_rtp_to_media_address = yes
严格RTP学***与NAT不兼容,启用后会丢弃经过NAT的RTP媒体包,导致单向音频。在rtp.conf中禁用:
[general] strictrtp = no
更复杂的NAT穿越方法(ICE、STUN或TURN)超出本文范围。
传输层安全(TLS)提供呼叫信令加密。Asterisk与SIP客户端TLS配置指南见[Asterisk安全呼叫教程](
免费版仅支持 Docker Hub 加速,不承诺可用性和速度;专业版支持更多镜像源,保证可用性和稳定速度,提供优先客服响应。
免费版仅支持 docker.io;专业版支持 docker.io、gcr.io、ghcr.io、registry.k8s.io、nvcr.io、quay.io、mcr.microsoft.com、docker.elastic.co 等。
当返回 402 Payment Required 错误时,表示流量已耗尽,需要充值流量包以恢复服务。
通常由 Docker 版本过低导致,需要升级到 20.x 或更高版本以支持 V2 协议。
先检查 Docker 版本,版本过低则升级;版本正常则验证镜像信息是否正确。
使用 docker tag 命令为镜像打上新标签,去掉域名前缀,使镜像名称更简洁。
探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录方式配置轩辕镜像加速服务,包含7个详细步骤
在 Linux 系统上配置轩辕镜像源,支持主流发行版
在 Docker Desktop 中配置轩辕镜像加速,适用于桌面系统
在 Docker Compose 中使用轩辕镜像加速,支持容器编排
在 k8s 中配置 containerd 使用轩辕镜像加速
在宝塔面板中配置轩辕镜像加速,提升服务器管理效率
在 Synology 群晖NAS系统中配置轩辕镜像加速
在飞牛fnOS系统中配置轩辕镜像加速
在极空间NAS中配置轩辕镜像加速
在爱快ikuai系统中配置轩辕镜像加速
在绿联NAS系统中配置轩辕镜像加速
在威联通NAS系统中配置轩辕镜像加速
在 Podman 中配置轩辕镜像加速,支持多系统
配置轩辕镜像加速9大主流镜像仓库,包含详细配置步骤
无需登录即可使用轩辕镜像加速服务,更加便捷高效
需要其他帮助?请查看我们的 常见问题 或 官方QQ群: 13763429