1、背景说明
在跟第三方的交互过程中,由于框架搭建限制,第三方建议使用ICE进行简单的通信
由于服务端采用的JAVA WEB服务,所以内部嵌套了一套 ICE 服务的协同启用
2、问题
**ICE服务的启动只能使用到自己所在机器的IP,
然而docker容器的IP和物理机的IP是不一样的,外部可以直接访问到物理机的IP,但是无法直接访问docker容器的IP。
造成了ICE的服务无法被外部请求到。**
3、问题的解决思路
这个问题的解决花费了2天时间,尝试过了各种端口映射和IP绑定方案,都无果。
最终的解决思路有两个,
一个是通过外部物理机进行ICE内部服务的转发,因为物理机是可以请求到docker容器的IP对应的端口的。而后通过其他形式进行请求结果的二次转发。
上述思路起源于ICE集群的注册中心的思路。 但是ICEGrid之类的配置和部署过于生涩复杂,暂时没时间研究这个事情。
所以采用了类似的解决方案,内部物理机转发其上容器的ICE的处理结果。
另外一种解决方案,源自0.0.0.0**的奇妙之处。
在容器内注册服务的时候,绑定这个地址,可以在外部通过外部的IP地址进行访问到**。
那么现在要解决的就是端口映射的问题了。
4、docker-tomcat容器的端口映射
由于tomcat容器内部的命令非常的局限,只能通过容器创建时候的完成端口映射,而无法后续新增外部的端口映射。
所以我采用了下述的命令
**docker run --privileged=true -v /test.war:/usr/local/tomcat/webapps/test.war -p 10010:10000 -p 8081:8080 --name tomcat7 tomcat:7 **
内部的tomcat占用8080端口,在外部通过8081进行访问,内部的ICE服务通过0.0.0.0和10000 进行启动,在外部通过物理机的IP+10010端口访问到了ICE服务。
这是最优解决方案