該事情還要從好幾天前說起.......
- 在從只用dubbo開發(fā)并且部署在一臺服務器上
- 到只用dubbo開發(fā)部署在兩臺服務器上
- 最后到使用docker容器將dubbo應用部署在兩臺服務器上
一直出現的問題是No provider available for the service from the url zookeeper:// ...
關于如何配置docker容器這里不再說明品姓,只記錄一路遇到的坑以及個人解決辦法
- 首先兴猩,在Dockerfile文件中
// 這里不再說明
FROM java:8
EXPOSE 8860
EXPOSE 12220
// 這里是開始配置環(huán)境變量,非常重要
// DUBBO_IP_TO_REGISTRY 這個是docker容器所在宿主機的外網ip射赛,也就是docker所在服務器的ip
ENV DUBBO_IP_TO_REGISTRY 120.79.172.**
// DUBBO_PORT_TO_REGITRY 是dubbo服務的端口娃善,用于注冊到zookeeper中的
ENV DUBBO_PORT_TO_REGISTRY 12220
// 這個也是dubbo的服務端口论衍,和上面的一樣都填dubbo的端口,而不是zookeeper的端口
ENV DUBBO_PORT_TO_BIND 12220
// 這里不再闡述
ADD target/blog-article.jar /www/blog/blog-article.jar
ENTRYPOINT ["java","-jar", "-Dspring.profiles.active=prod","/www/blog/blog-article.jar"]
這是Dockerfile文件的配置
- 對于服務器的配置(我的兩臺服務器都需要這樣配置聚磺,如果只配置以上配置報錯no provider....)
// 查詢主機名坯台,這里可以自己修改主機名,我就是修改過的瘫寝,修改完重啟一下服務器
[root@ratil-server1 ~]# hostname
ratil-server1
// 在hosts文件末行添加下面的配置蜒蕾,就是將主機名映射到本機ip,該ip是該服務器的ip矢沿,和zookeeper什么的無關
[root@ratil-server1 ~]# vi /etc/hosts
120.79.172.** ratil-server1
// 最后ping你的主機名滥搭,如果ping通了且出現了服務器的ip酸纲,則是設置成功捣鲸,hosts修改一般都是立即生效
[root@ratil-server1 ~]# ping ratil-server1
PING ratil-server1 (120.79.172.**) 56(84) bytes of data.
64 bytes from ratil-server1 (120.79.172.**): icmp_seq=1 ttl=64 time=2.06 ms
64 bytes from ratil-server1 (120.79.172.**): icmp_seq=2 ttl=64 time=2.01 ms
64 bytes from ratil-server1 (120.79.172.**): icmp_seq=3 ttl=64 time=2.07 ms
最后通過docker部署
通過Dubbo Admin(2.7,自行安裝部署)可以看到開啟了的dubbo服務闽坡。
點開詳情可以看到provider所在的ip以及端口(注:這里的ip必須是dubbo所部署的主機ip栽惶,不然就可能會出問題)
比如:我的一個錯誤問題
在47.*.*.*服務器上部署了zookeeper以及一個名稱為A的provider
在120.*.*.*服務器上部署了兩個dubbo應用愁溜,
應用B既要消費A也作為provider提供服務給其他dubbo應用(同一臺服務器上的應用C)。
在注冊到zookeeper后外厂,通過Dubbo Admin查看應用的詳情冕象,
發(fā)現應用A注冊的ip是本機的47.*.*.*的ip,但是應用B注冊的ip也是47..*.*.*汁蝶。應用B應該注冊的ip地址是自己所在服務器的120..*.*.*才是正確的渐扮。
這就導致應用C或者其他的dubbo應用找不到應用B (也就是no provider的錯誤)
這個問題可能是我之前不懂隨意修改了第二胎服務器的主機名對應ip所致。
所以需要注意的就是掖棉,使用Dubbo Admin查看dubbo應用詳情的時候墓律,該dubbo應用的ip地址一定要和部署的服務器的ip相同。
如果不是相同幔亥,則檢查上面所說的兩個步驟哪里有沒有問題耻讽。如果上面兩步都做了還是錯,重啟服務器報平安帕棉。
我一開始就是针肥,修改了主機名還是啥,什么數據庫連接也報錯香伴,zookeeper連接也超時慰枕,然后重啟服務器都好了