用docker来安装部署freeswitch记录

news2025/6/12 20:21:09

今天刚才测试一个callcenter的项目,所以尝试安装freeswitch

1、使用轩辕镜像 - 中国开发者首选的专业 Docker 镜像加速服务平台

 编辑下面/etc/docker/daemon.json文件为

{
  "registry-mirrors": [
        "https://docker.xuanyuan.me"
        ]
}

同时可以进入轩辕镜像 - 中国开发者首选的专业 Docker 镜像加速服务平台

进行搜索获取freeswitch的镜像下载地址

2、下载

docker pull safarov/freeswitch

3、

docker run --net=host --name freeswitch \
           -e SOUND_RATES=8000:16000 \
           -e SOUND_TYPES=music:en-us-callie \
           -v /home/mydata/freeswitch:/usr/share/freeswitch/sounds \
           -v /etc/freeswitch/:/etc/freeswitch \
           safarov/freeswitch

3、最后是这样的

上面有两个错误,通过下面方式处理解决错误

3.1、加入--cap-add=SYS_NICE \解决上面的第一个错误

docker run --net=host --name freeswitch \
           --cap-add=SYS_NICE \
           -e SOUND_RATES=8000:16000 \
           -e SOUND_TYPES=music:en-us-callie \
           -v /home/mydata/freeswitch:/usr/share/freeswitch/sounds \
           -v /etc/freeswitch/:/etc/freeswitch \
           safarov/freeswitch

3.2、编辑 /etc/sysctl.conf 添加以下内容:

# 允许容器使用实时调度策略
kernel.sched_rt_runtime_us = -1

3.3、在

本来用下面,但拷贝进去出错

docker run --net=host --name freeswitch \
           --cap-add=SYS_NICE \          # 授予优先级调整权限
           --ulimit rtprio=99 \          # 解除实时优先级限制[5](@ref)
           --security-opt seccomp=unconfined \  # 绕过安全策略限制[11](@ref)
           -e SOUND_RATES=8000:16000 \
           -e SOUND_TYPES=music:en-us-callie \
           -v /home/mydata/freeswitch:/usr/share/freeswitch/sounds \
           -v /etc/freeswitch:/etc/freeswitch \
           safarov/freeswitch

所以用下面的了就可以了

docker run --net=host --name freeswitch --cap-add=SYS_NICE --ulimit rtprio=99 -e SOUND_RATES=8000:16000 -e SOUND_TYPES=music:en-us-callie -v /home/mydata/freeswitch:/usr/share/freeswitch/sounds -v /etc/freeswitch:/etc/freeswitch safarov/freeswitch

3.4 通过下面方式可以看到初始密码default_password

cd /etc/freeswitch/
vi vars.xml
<include>
  <!-- Preprocessor Variables
       These are introduced when configuration strings must be consistent across modules.
       NOTICE: YOU CAN NOT COMMENT OUT AN X-PRE-PROCESS line, Remove the line instead.

       WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING

       YOU SHOULD CHANGE THIS default_password value if you don't want to be subject to any
       toll fraud in the future.  It's your responsibility to secure your own system.

       This default config is used to demonstrate the feature set of FreeSWITCH.

       WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING
  -->
  <X-PRE-PROCESS cmd="set" data="default_password=0YZMB0_oSD3V"
  <X-PRE-PROCESS cmd="set" data="disable_system_api_commands=false"/>
  <!-- Did you change it yet? -->
  <!--

3.5 但现在还是有问题啊

[root@localhost ~]# docker exec -it freeswitch bash
rpc error: code = 2 desc = oci runtime error: exec failed: container_linux.go:300: starting container process caused "exec: \"bash\": executable file not found in $PATH"


[root@localhost ~]# docker exec freeswitch fs_cli -x "status" 
[ERROR] fs_cli.c:1699 main() Error Connecting []
[root@localho

3.6 但通过下面可以进入

[root@localhost ~]# docker exec -it freeswitch /bin/sh


BusyBox v1.35.0 (Debian 1:1.35.0-4+b4) built-in shell (ash)
Enter 'help' for a list of built-in commands.

/ # 

但状态运行还是一样的问题

3.7、进入容器修改配置文件event_socket.conf.xml:

vi /usr/share/freeswitch/conf/vanilla/autoload_configs/event_socket.conf.xml
<configuration name="event_socket.conf" description="Socket Client">
  <settings>
    <param name="nat-map" value="false"/>
    <param name="listen-ip" value="::"/>
    <param name="listen-port" value="8021"/>
    <param name="password" value="ClueCon"/>
    <!--<param name="apply-inbound-acl" value="loopback.auto"/>-->
    <!--<param name="stop-on-bind-error" value="true"/>-->
  </settings>
</configuration>

上面的listen-ip修改成0.0.0.0,如下:

<configuration name="event_socket.conf" description="Socket Client">
  <settings>
    <param name="nat-map" value="false"/>
    <param name="listen-ip" value="0.0.0.0"/>
    <param name="listen-port" value="8021"/>
    <param name="password" value="ClueCon"/>
    <!--<param name="apply-inbound-acl" value="loopback.auto"/>-->
    <!--<param name="stop-on-bind-error" value="true"/>-->
  </settings>
</configuration>

3.8、修改编辑 ACL 配置文件

vi /usr/share/freeswitch/conf/vanilla/autoload_configs/acl.conf.xml
<configuration name="acl.conf" description="Network Lists">
  <network-lists>
    <!--
         These ACL's are automatically created on startup.

         rfc1918.auto  - RFC1918 Space
         nat.auto      - RFC1918 Excluding your local lan.
         localnet.auto - ACL for your local lan.
         loopback.auto - ACL for your local lan.
    -->

    <list name="lan" default="allow">
      <!--<node type="deny" cidr="192.168.42.0/24"/>
      <node type="allow" cidr="192.168.42.42/32"/> -->
      <node type="allow" cidr="0.0.0.0/0"/> <!-- 允许所有IP访问(测试用) -->
    </list>
        
    <!--                                                 
        This will traverse the directory adding all users    
        with the cidr= tag to this ACL, when this ACL matches
        the users variables and params apply as if they
        digest authenticated.
    -->                                 
    <list name="domains" default="deny">                                                 
      <!-- domain= is special it scans the domain from the directory to build the ACL -->
      <node type="allow" domain="$${domain}"/>                              
      <!-- use cidr= if you wish to allow ip ranges to this domains acl. -->
      <!-- <node type="allow" cidr="192.168.0.0/24"/> -->
    </list>
                  
  </network-lists>
</configuration>

上面注释掉原先的,增加了下面一行

<node type="allow" cidr="0.0.0.0/0"/> <!-- 允许所有IP访问(测试用) -->

3.9 、在 event_socket.conf.xml 中引用此规则:

<param name="apply-inbound-acl" value="lan"/> <!-- 原值可能是loopback.auto -->

当然要是原先没有控制,我上面没有控制,应该可以不需要增加这个了

4、但上面的方式还是不行,只能放弃最新的版本安装了,后来用了下面的容器了

docker run -d --name freeswitch --memory=1g --memory-swap=1g  --net=host --cap-add=SYS_NICE --ulimit rtprio=99 -p 5060:5060/tcp -p 5060:5060/udp -p 5080:5080/tcp -p 5080:5080/udp -p 8021:8021/tcp -p 7443:7443/tcp -p 16384-32768:16384-32768/udp -e SOUND_RATES="8000:16000" -e SOUND_TYPES="music:en-us-callie" -v /home/mydata/freeswitch:/usr/share/freeswitch/sounds -v /etc/freeswitch:/etc/freeswitch safarov/freeswitch:1.10.3

4.1 上面版本容器下载运行后如下:

[root@localhost ~]# docker logs freeswitch
Downloading freeswitch-sounds-music-8000-1.0.52.tar.gz
Skiping download of freeswitch-sounds-music-8000-1.0.52.tar.gz. Already present
Downloading freeswitch-sounds-music-16000-1.0.52.tar.gz
Skiping download of freeswitch-sounds-music-16000-1.0.52.tar.gz. Already present
Downloading freeswitch-sounds-en-us-callie-8000-1.0.51.tar.gz
Skiping download of freeswitch-sounds-en-us-callie-8000-1.0.51.tar.gz. Already present
Downloading freeswitch-sounds-en-us-callie-16000-1.0.51.tar.gz
Skiping download of freeswitch-sounds-en-us-callie-16000-1.0.51.tar.gz. Already present
New FreeSwitch password for SIP calls set to 'o-qEitzz29Sc'
2025-06-08 00:24:32.672768 [WARNING] sofia.c:5227 rtp-timeout-sec deprecated use media_timeout variable.
2025-06-08 00:24:32.672775 [WARNING] sofia.c:5234 rtp-hold-timeout-sec deprecated use media_hold_timeout variable.
2025-06-08 00:24:32.673040 [WARNING] sofia.c:5227 rtp-timeout-sec deprecated use media_timeout variable.
2025-06-08 00:24:32.673042 [WARNING] sofia.c:5234 rtp-hold-timeout-sec deprecated use media_hold_timeout variable.
2025-06-08 00:24:32.673198 [WARNING] sofia.c:5227 rtp-timeout-sec deprecated use media_timeout variable.
2025-06-08 00:24:32.673200 [WARNING] sofia.c:5234 rtp-hold-timeout-sec deprecated use media_hold_timeout variable.
2025-06-08 00:24:32.673364 [WARNING] sofia.c:5227 rtp-timeout-sec deprecated use media_timeout variable.
2025-06-08 00:24:32.673368 [WARNING] sofia.c:5234 rtp-hold-timeout-sec deprecated use media_hold_timeout variable.
2025-06-08 00:24:32.674981 [WARNING] sofia.c:2306 MSG Thread 0 Started

4.2 检查结果如下:

docker exec freeswitch fs_cli -x "status"
UP 0 years, 0 days, 0 hours, 1 minute, 15 seconds, 171 milliseconds, 923 microseconds
FreeSWITCH (Version 1.10.0  64bit) is ready
0 session(s) since startup
0 session(s) - peak 0, last 5min 0 
0 session(s) per Sec out of max 30, peak 0, last 5min 0 
1000 session(s) max
min idle cpu 0.00/98.53
Current Stack Size/Max 240K/8192K

4.3 同时现在端口也正常了

[root@localhost ~]# netstat -lntp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 192.168.199.151:5060    0.0.0.0:*               LISTEN      24603/freeswitch    
tcp        0      0 192.168.199.151:5066    0.0.0.0:*               LISTEN      24603/freeswitch    
tcp        0      0 192.168.199.151:8081    0.0.0.0:*               LISTEN      24603/freeswitch    
tcp        0      0 192.168.199.151:8082    0.0.0.0:*               LISTEN      24603/freeswitch    
tcp        0      0 192.168.199.151:7443    0.0.0.0:*               LISTEN      24603/freeswitch    
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1027/sshd           
tcp        0      0 192.168.199.151:5080    0.0.0.0:*               LISTEN      24603/freeswitch    
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      1238/master         
tcp6       0      0 ::1:5060                :::*                    LISTEN      24603/freeswitch    
tcp6       0      0 :::3306                 :::*                    LISTEN      1531/docker-proxy-c 
tcp6       0      0 :::6379                 :::*                    LISTEN      1520/docker-proxy-c 
tcp6       0      0 ::1:8081                :::*                    LISTEN      24603/freeswitch    
tcp6       0      0 ::1:8082                :::*                    LISTEN      24603/freeswitch    
tcp6       0      0 :::8021                 :::*                    LISTEN      24603/freeswitch    
tcp6       0      0 :::22                   :::*                    LISTEN      1027/sshd           
tcp6       0      0 ::1:5080                :::*                    LISTEN      24603/freeswitch    
tcp6       0      0 ::1:25                  :::*                    LISTEN      1238/master         
firewall-cmd --add-port=8021/tcp  --permanent
firewall-cmd --add-port=5060/tcp  --permanent
firewall-cmd --add-port=7443/tcp  --permanent
firewall-cmd --reload
firewall-cmd --list-all

4.5 增加防火墙端口以便访问

不过通过telnet连接端口8021连接不上,提示权限拒绝

本地/etc/freeswitch/的event_socket.conf.xml

<configuration name="event_socket.conf" description="Socket Client">
  <settings>
    <param name="nat-map" value="false"/>
    <param name="listen-ip" value="0.0.0.0"/>
    <param name="listen-port" value="8021"/>
    <param name="password" value="ClueCon"/>
    <!--<param name="apply-inbound-acl" value="loopback.auto"/>-->
    <!-- 修改为允许所有IP -->
    <param name="apply-inbound-acl" value="all.allow"/>
    <param name="stop-on-bind-error" value="true"/>
  </settings>
</configuration>

最后还是在本地的配置

/etc/freeswitch/autoload_configs

vi acl.conf.xml

<configuration name="acl.conf" description="Network Lists">
  <network-lists>
    <!--
         These ACL's are automatically created on startup.

         rfc1918.auto  - RFC1918 Space
         nat.auto      - RFC1918 Excluding your local lan.
         localnet.auto - ACL for your local lan.
         loopback.auto - ACL for your local lan.
    -->

     <list name="all.allow" default="allow"> <!-- 默认策略改为allow -->
      <node type="allow" cidr="127.0.0.1/32"/> <!-- 确保本地IP被允许 -->
      <node type="allow" cidr="192.168.199.151/32"/>
    </list>

    <list name="lan" default="allow">
      <node type="allow" cidr="127.0.0.1/32"/>
        <node type="allow" cidr="192.168.199.151/32"/>
    </list>

    <!--
        This will traverse the directory adding all users
        with the cidr= tag to this ACL, when this ACL matches
        the users variables and params apply as if they
        digest authenticated.
    -->
    <list name="domains" default="deny">
      <!-- domain= is special it scans the domain from the directory to build the ACL -->
      <node type="allow" domain="$${domain}"/>
      <!-- use cidr= if you wish to allow ip ranges to this domains acl. -->
      <!-- <node type="allow" cidr="192.168.0.0/24"/> -->
    </list>

  </network-lists>
</configuration>

上面主要需要更加

<list name="all.allow" default="allow"> <!-- 默认策略改为allow -->
      <node type="allow" cidr="127.0.0.1/32"/> <!-- 确保本地IP被允许 -->
      <node type="allow" cidr="192.168.199.151/32"/>
    </list>

4.6 在powershell里输入

Write-Output "auth ClueCon`r`n" | telnet 192.168.199.151 8021

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2407513.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

多模态大语言模型arxiv论文略读(108)

CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题&#xff1a;CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者&#xff1a;Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…

QT: `long long` 类型转换为 `QString` 2025.6.5

在 Qt 中&#xff0c;将 long long 类型转换为 QString 可以通过以下两种常用方法实现&#xff1a; 方法 1&#xff1a;使用 QString::number() 直接调用 QString 的静态方法 number()&#xff0c;将数值转换为字符串&#xff1a; long long value 1234567890123456789LL; …

华为云Flexus+DeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建

华为云FlexusDeepSeek征文&#xff5c;DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建 前言 如今大模型其性能出色&#xff0c;华为云 ModelArts Studio_MaaS大模型即服务平台华为云内置了大模型&#xff0c;能助力我们轻松驾驭 DeepSeek-V3/R1&#xff0c;本文中将分享如何…

智能仓储的未来:自动化、AI与数据分析如何重塑物流中心

当仓库学会“思考”&#xff0c;物流的终极形态正在诞生 想象这样的场景&#xff1a; 凌晨3点&#xff0c;某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径&#xff1b;AI视觉系统在0.1秒内扫描包裹信息&#xff1b;数字孪生平台正模拟次日峰值流量压力…

自然语言处理——循环神经网络

自然语言处理——循环神经网络 循环神经网络应用到基于机器学习的自然语言处理任务序列到类别同步的序列到序列模式异步的序列到序列模式 参数学习和长程依赖问题基于门控的循环神经网络门控循环单元&#xff08;GRU&#xff09;长短期记忆神经网络&#xff08;LSTM&#xff09…

【论文阅读28】-CNN-BiLSTM-Attention-(2024)

本文把滑坡位移序列拆开、筛优质因子&#xff0c;再用 CNN-BiLSTM-Attention 来动态预测每个子序列&#xff0c;最后重构出总位移&#xff0c;预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵&#xff08;S…

select、poll、epoll 与 Reactor 模式

在高并发网络编程领域&#xff0c;高效处理大量连接和 I/O 事件是系统性能的关键。select、poll、epoll 作为 I/O 多路复用技术的代表&#xff0c;以及基于它们实现的 Reactor 模式&#xff0c;为开发者提供了强大的工具。本文将深入探讨这些技术的底层原理、优缺点。​ 一、I…

SpringTask-03.入门案例

一.入门案例 启动类&#xff1a; package com.sky;import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCach…

ios苹果系统,js 滑动屏幕、锚定无效

现象&#xff1a;window.addEventListener监听touch无效&#xff0c;划不动屏幕&#xff0c;但是代码逻辑都有执行到。 scrollIntoView也无效。 原因&#xff1a;这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作&#xff0c;从而会影响…

在WSL2的Ubuntu镜像中安装Docker

Docker官网链接: https://docs.docker.com/engine/install/ubuntu/ 1、运行以下命令卸载所有冲突的软件包&#xff1a; for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done2、设置Docker…

第 86 场周赛:矩阵中的幻方、钥匙和房间、将数组拆分成斐波那契序列、猜猜这个单词

Q1、[中等] 矩阵中的幻方 1、题目描述 3 x 3 的幻方是一个填充有 从 1 到 9 的不同数字的 3 x 3 矩阵&#xff0c;其中每行&#xff0c;每列以及两条对角线上的各数之和都相等。 给定一个由整数组成的row x col 的 grid&#xff0c;其中有多少个 3 3 的 “幻方” 子矩阵&am…

【JavaWeb】Docker项目部署

引言 之前学习了Linux操作系统的常见命令&#xff0c;在Linux上安装软件&#xff0c;以及如何在Linux上部署一个单体项目&#xff0c;大多数同学都会有相同的感受&#xff0c;那就是麻烦。 核心体现在三点&#xff1a; 命令太多了&#xff0c;记不住 软件安装包名字复杂&…

vue3+vite项目中使用.env文件环境变量方法

vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量&#xff0c;这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…

ArcGIS Pro制作水平横向图例+多级标注

今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作&#xff1a;ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等&#xff08;ArcGIS出图图例8大技巧&#xff09;&#xff0c;那这次我们看看ArcGIS Pro如何更加快捷的操作。…

网络编程(UDP编程)

思维导图 UDP基础编程&#xff08;单播&#xff09; 1.流程图 服务器&#xff1a;短信的接收方 创建套接字 (socket)-----------------------------------------》有手机指定网络信息-----------------------------------------------》有号码绑定套接字 (bind)--------------…

Java面试专项一-准备篇

一、企业简历筛选规则 一般企业的简历筛选流程&#xff1a;首先由HR先筛选一部分简历后&#xff0c;在将简历给到对应的项目负责人后再进行下一步的操作。 HR如何筛选简历 例如&#xff1a;Boss直聘&#xff08;招聘方平台&#xff09; 直接按照条件进行筛选 例如&#xff1a…

全志A40i android7.1 调试信息打印串口由uart0改为uart3

一&#xff0c;概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本&#xff1a;2014.07&#xff1b; Kernel版本&#xff1a;Linux-3.10&#xff1b; 二&#xff0c;Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01)&#xff0c;并让boo…

pikachu靶场通关笔记22-1 SQL注入05-1-insert注入(报错法)

目录 一、SQL注入 二、insert注入 三、报错型注入 四、updatexml函数 五、源码审计 六、insert渗透实战 1、渗透准备 2、获取数据库名database 3、获取表名table 4、获取列名column 5、获取字段 本系列为通过《pikachu靶场通关笔记》的SQL注入关卡(共10关&#xff0…

Redis数据倾斜问题解决

Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中&#xff0c;部分节点存储的数据量或访问量远高于其他节点&#xff0c;导致这些节点负载过高&#xff0c;影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…

mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包

文章目录 现象&#xff1a;mysql已经安装&#xff0c;但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时&#xff0c;可能是因为以下几个原因&#xff1a;1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…