公司最近用docker来部署项目和远程发布。其中遇到了很多坑爹问题很奇怪。。现在就算能正常部署了依然没有搞清楚。先叙述问题吧。
首先是发布消费者所以消费者第一个遇到问题
问题如下:
1.如果docker启动不用–network host则直接zookeeper not connect
2.如果docker某些jdk版本用了–network host则直接报java.net.UnknownHostException: vos-app-t55: System error
第一个问题:pom 在zkclient连接我用了com.101tec 版本只要升级到0.11最高级就是无法连接后面是机缘巧合我回退到0.7版本就连接上了。这个我没有找具体原因但是并不是每个版本docker都会报这个问题。我本地docker版本是19.03.12服务器是18.0.3.0。我自己本人是没有想到docker容器会受到不同版本的影响但是事实就是如此
第二个问题:这个问题并不是每个内嵌的jdk也会遇到但是绝大部分都会遇到我自己用centeros+openjdk就是没有遇到这个问题但是线上大部分jdk都是会遇到这个问题。
生产者部署问题
1.生产者注册到zookeeper是容器的ip
2.正确注册到zookeeper容器ip也正常telnet也telnet通但是就是无法连接
第一个问题:-e DUBBO_IP_TO_REGISTRY=ipXXXX需要在启动容器上添加该指令他可以让注册到zookeeper的ip正确的指向你所需要的ip这个一般都是主机的ip
第二个问题:这个问题并不是每个版本的docker都会遇到就是注册到zookeeper里面的信息是正确的能ping通也可以telnet但是就是无法访问后来也是查阅了相关信息添加了-e DUBBO_PORT_TO_BIND=20880指令以后终于可以成功让消费者连上了。
总结:docker不是jvm。。他不是每个镜像在docker跑都是一样,如果真的要在发布中用上最好有专业的运维不然这些坑会浪费很多时间
后续–
后面发现原来查询慢是宿主没有设置nameserver 导致docker里面的dns转换特别慢。导致链接外部的服务特别慢导致超时!!可以为主机设置nameserver 或者 docker run -it --dns xx.xx.xx.xx xxxxxxxx 为启动命令添加–dns xx.xx.xx.xx 来设置容器里面dns这样就可以正常访问