使用docker搭建opensips3.1
前言使用docker搭建opensips没有什么难的,主要有两个问题docker网络NAT问题opensips3.1 docker版本官方还未更新的问题步奏先安装好dockerclone我fork的仓库git clone https://github.com/daxiondi/docker-opensips.gitcd docker-opensips打包镜像(速度有点慢,耐心等待)make bui
前言
使用docker搭建opensips没有什么难的,主要有两个问题
- docker网络NAT问题
- opensips3.1 docker版本官方还未更新的问题
步奏
- 先安装好docker
- clone我fork的仓库
git clone https://github.com/daxiondi/docker-opensips.git
cd docker-opensips
- 打包镜像(速度有点慢,耐心等待)
make build-3.1
安装好后会在本地生成docker image,使用命令查看他
docker images
会看到一个opensips/opensips:latest
的镜像
- 运行docker
docker run -p 5060:5060/udp -d --name opensips opensips/opensips:latest
- 运行成功后使用
docker ps
查看镜像是否成功启动
解决docker NAT的问题
-
原因:
使用docker logs -f opensips
可以看到opensip监听的端口是docker内部的网络,如下图。这在web应用当中没有什么问题。 -
1 .如:一个用户点击登录按钮,通过http/https请求请求主机的ip,主机通过docker的虚拟网络和iptables端口转发到docker容器,实现应答。
-
2.但是在实时语音和视频的场景,双方要通话,就必须知道对方的可通信ip地址,显然docker的容器的ip是无法和对方通信,所以我们需要解决这个问题
解决方法1
在opensips的config配置当中有advertised_address
配置他会去遍历NAT,并在通知对方的sip消息头上修改ip地址为NAT映射后可通信的地址。
- 实现步奏
docker cp opensips:/etc/opensips/opensips.cfg .
vim opensips.cfg
找到 socket=udp:172.17.0.4:5060然后添加以下行
advertised_address="public ip:5060"
保存后在放入docker容器
docker cp opensips.cfg opensips:/etc/opensips/opensips.cfg
docke restart opensips
重启后,使用你的sip终端就可以正常呼入电话了
解决方案二
- 思路:docker为什么有NAT?
docker的默认网络模式属于bridge模式,容器的文件,ip,进程列表相互隔离
如下图
host模式
启动容器的时候使用host模式,那么这个容器将不会获得一个独立的Network Namespace,而是和宿主机共用一个 Network Namespace。容器将不会虚拟出自己的网卡,配置自己的 IP 等,而是使用宿主机的 IP 和端口。但是,容器的其他方面,如文件系统、进程列表等还是和宿主机隔离的。 Host模式如下图所示:
- 启动命令
docker run -tid --net=host --name opensips opensips/opensips:latest
注意这些不需要-p 去指定端口的映射,因为host模式是使用宿主机的端口,所以我们要保证启动的进程的端口在主机没有被其他进程占用。
我们再次使用docker logs -f opensips
查看监听的ip地址和端口
打开sip终端进行测试吧
更多推荐
所有评论(0)