Docker部署Kamailio,并使用LinPhone实现网络通话

前提条件

准备一个路由器,一个服务器,两个终端设备(手机或电脑)

docker部署安装

我使用的是windows系统,docker desktop
在这里插入图片描述

  1. 先启动Docker desktop
  2. 打开cmd,输入docker命令
    docker run --name kamailio --rm -p 5060:5060/udp -p 5060:5060 kamailio/kamailio-ci:5.5.2-alpine -m 64 -M 8
    
  3. docker desktop 出现服务
    在这里插入图片描述
    点击kamailio蓝色链接进入命令窗口
    在这里插入图片描述
    输入ip ad查看docker内部的通信ip,此处为172.17.0.2需要记录下;
  4. 打开cmd窗口,输入ipconfig查看服务器ip地址,此处为192.168.101.3,记录下来;
    在这里插入图片描述
  5. 进入docker,输入vi /etc/kamailio/kamailio.cfg
    在这里插入图片描述
  6. 在第198行的位置,# listen=udp:10.0.0.10:5060的下面添加下述配置
    listen=udp:172.17.0.2:5060 advertise 192.168.101.3:5060
    listen=tcp:172.17.0.2:5060 advertise 192.168.101.3:5060
    
<think>我们参考引用内容来回答用户关于在Docker部署和配置Kamailio的问题。用户的问题:如何在Docker部署和配置Kamailio?根据引用内容,我们可以总结出两种主要方法:方法一:直接使用dockerrun命令运行官方镜像(如引用[3]所示)方法二:使用DockerCompose编排多个容器(如引用[2]和引用[4]所示)下面我们将分步骤说明这两种方法。方法一:使用dockerrun命令部署步骤1:安装DockerEngine(如引用[1]所示)在Ubuntu系统上,执行以下命令:sudoaptupdatesudoaptinstall-ydocker-cedocker-ce-clicontainerd.io步骤2:运行Kamailio容器(如引用[3]所示)使用以下命令运行一个Kamailio容器dockerrun--namekamailio--rm-p5060:5060/udp-p5060:5060kamailio/kamailio-ci:5.5.2-alpine-m64-M8参数说明:--name:为容器指定一个名称(例如kamailio)--rm:容器退出时自动删除容器-p:端口映射,将主机的5060端口(UDP和TCP)映射到容器的5060端口镜像名称:kamailio/kamailio-ci:5.5.2-alpine(这里指定了版本和基础镜像)-m64-M8:这是传递给Kamailio的参数,表示预分配64MB共享内存,以及8个子进程步骤3:配置Kamailio(如引用[3]所示)进入容器内部修改配置文件:dockerexec-itkamailio/bin/sh然后编辑配置文件(通常位于/etc/kamailio/kamailio.cfg)例如,需要修改监听地址和广告地址(advertise):在配置文件中找到类似#listen=udp:10.0.0.10:5060的行,在其下方添加:listen=udp:172.17.0.2:5060#这里172.17.0.2是容器内部的IP,需要根据实际情况修改advertise192.168.101.3:5060#这里192.168.101.3是宿主机的IPlisten=tcp:172.17.0.2:5060advertise192.168.101.3:5060注意:容器内部的IP可以通过在容器内运行`ipad`命令查看(如引用[3]中所述),宿主机的IP通过`ipconfig`(Windows)或`ifconfig`(Linux)查看。修改后重启Kamailio服务(在容器内执行):kamctlrestart方法二:使用DockerCompose部署(适用于多容器协作,如需要MySQL、RTPproxy等)步骤1:安装DockerCompose(如果尚未安装)参考Docker官方文档安装DockerCompose。步骤2:创建docker-compose.yml文件(如引用[2]所示)示例内容如下(根据引用[2]和引用[4]的提示):version:'3'services:kamailio:image:kamailio/kamailio-ci:5.5.2-alpinecommand:-m64-M8ports:-"5060:5060/udp"-"5060:5060/tcp"networks:-voip_net#如果需要自定义配置文件,可以挂载卷#volumes:#-./kamailio.cfg:/etc/kamailio/kamailio.cfgmysql:image:mysql:5.7environment:MYSQL_ROOT_PASSWORD:your_root_passwordMYSQL_DATABASE:kamailioMYSQL_USER:kamailioMYSQL_PASSWORD:kamailio_passwordnetworks:-voip_netrtpproxy:image:sipwise/rtpproxyports:-"7722:7722/udp"networks:-voip_netnetworks:voip_net:注意:这里创建了一个网络voip_net,使得三个容器可以互相通信。同时,我们为MySQL设置了环境变量。步骤3:启动服务在docker-compose.yml所在目录运行:docker-composeup-d步骤4:配置Kamailio如果需要在配置文件中使用MySQL,则需要在kamailio.cfg中配置数据库连接,可以使用服务名(在docker-compose中,服务名可以作为主机名):mysql://kamailio:kamailio_password@mysql:3306/kamailio同样,可以通过挂载卷的方式覆盖容器内的配置文件,或者进入容器修改配置文件。步骤5:重启容器使配置生效docker-composerestartkamailio注意事项:-在配置广告地址(advertise)时,如果Kamailio容器位于Docker网络中,可能需要使用宿主机的公网IP地址,以便外部客户端能够正确访问。-如果使用DockerCompose,容器间的通信使用服务名即可,例如在Kamailio配置中连接MySQL容器,可以使用服务名“mysql”。以上两种方法均可用于部署Kamailio。如果只是快速测试,方法一更简单;如果需要多个服务(如数据库、RTP代理),则方法二更合适。根据引用[4]的建议,容器化协作可以快速部署和联调各服务。最后,我们可以生成相关问题:1.如何配置Kamailio与MySQL数据库集成?2.在Docker部署Kamailio时,如何解决网络配置问题(如SIP信令和媒体流的端口)?3.如何对Docker中的Kamailio进行性能调优?</think>### 在 Docker部署和配置 Kamailio 的完整指南 #### 一、基础环境准备 1. **安装 Docker Engine** 在 Ubuntu 系统执行: ```bash sudo apt update && sudo apt install -y docker-ce docker-ce-cli containerd.io ``` 验证安装:`docker --version`[^1] 2. **获取 Kamailio 镜像** 官方镜像地址:[kamailio/kamailio-ci](https://hub.docker.com/r/kamailio/kamailio-ci) ```bash docker pull kamailio/kamailio-ci:5.5.2-alpine # 推荐使用Alpine版本 ``` #### 二、单容器快速部署 ```bash docker run --name kamailio --rm \ -p 5060:5060/udp -p 5060:5060/tcp \ # 暴露SIP端口 kamailio/kamailio-ci:5.5.2-alpine \ -m 64 -M 8 # 内存预分配参数 ``` **关键参数说明**: - `-p 5060:5060/udp`:映射 UDP 5060 端口(SIP 协议) - `-m 64`:预分配 64MB 共享内存 - `-M 8`:启动 8 个工作进程[^3] #### 三、关键配置修改 1. **进入容器修改配置**: ```bash docker exec -it kamailio /bin/sh vi /etc/kamailio/kamailio.cfg ``` 2. **修改监听地址**(解决 NAT 问题): ```cfg # 在配置文件中添加(示例值需替换): listen=udp:172.17.0.2:5060 # 容器内IP(通过ip ad查看) advertise 192.168.1.100:5060 # 宿主机公网IP listen=tcp:172.17.0.2:5060 advertise 192.168.1.100:5060 ``` ![Kamailio 配置文件修改示意图](https://example.com/kamailio-cfg.png) *图:配置文件中监听地址修改位置参考[^3]* 3. **重启服务生效**: ```bash kamctl restart # 容器内执行 ``` #### 四、Docker Compose 多容器部署 ```yaml # docker-compose.yml version: '3' services: kamailio: image: kamailio/kamailio-ci:5.5.2-alpine ports: - "5060:5060/udp" - "5060:5060/tcp" command: -m 64 -M 8 networks: - voip_net mysql: # 数据库容器 image: mysql:5.7 environment: MYSQL_ROOT_PASSWORD: kamailio_pass networks: - voip_net rtpproxy: # 媒体代理 image: sipwise/rtpproxy ports: - "7722:7722/udp" networks: - voip_net networks: voip_net: ``` 启动命令:`docker-compose up -d`[^2][^4] #### 五、网络配置要点 | **配置项** | **容器内查看命令** | **宿主机查看命令** | |------------------|-------------------|---------------------| | 容器IP地址 | `ip ad` | `docker inspect 容器ID` | | 宿主机公网IP | - | `ipconfig`(Win)/`ifconfig`(Linux) | | 端口映射状态 | `netstat -an` | `docker port 容器ID` | #### 六、测试验证 1. **日志监控**: ```bash docker logs -f kamailio # 实时查看日志 ``` 成功启动标志:`INFO: <core> [main.c:3402]: main(): Kamailio is ready to process requests` 2. **SIP 注册测试**: 使用 LinPhone 或 MicroSIP 客户端,配置服务器地址为宿主机IP,测试注册和通话[^3] #### 七、生产环境建议 1. **配置文件持久化**: ```yaml volumes: - ./kamailio:/etc/kamailio # 挂载本地目录 ``` 2. **性能调优参数**: ```bash command: -m 256 -M 16 -f -E # 增加内存和进程数 ``` 3. **健康检查**: ```yaml healthcheck: test: ["CMD", "kamcmd", "psx"] interval: 30s ``` > **关键提示**:当客户端位于不同网络时,必须正确配置 `advertise` 参数解决 NAT 穿透问题[^3][^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值