解決docker容器部署dubbo服務時,註冊到註冊中心的地址是docker容器內的地址

今天遇到一個問題,我們用docker容器部署springboot的應用程序,當我們跨機器調用服務時,會出現無法調用到服務。經過排查出現問題的原因如下:

1、Aservice使用docker部署,註冊到zk上的ip地址爲172.17.0.5(這是容器內部的ip地址)

2、Bservice從zk取到Aservice的地址爲Aservice容器內的地址

3、當Aservice和Bservice不在同一個主機時,就出現無法互通

要解決上述的問題,主要就是將docker容器管理的應用註冊到zk上的地址弄成宿主機的ip地址。經過查找資料,嘗試了兩種解決方案。

1、通過docker網絡模式爲主機模式(默認網橋)

docker run -d --name xxx –net “host” --restart=always xxx

這裏可以不用配置端口映射,並且我們用docker ps也看不到該容器的綁定的端口

2、通過-e 設置一些dubbo註冊到註冊中心的ip地址,可通過下面參數指定

DUBBO_IP_TO_REGISTRY — 註冊到註冊中心的IP地址

DUBBO_PORT_TO_REGISTRY — 註冊到註冊中心的端口

DUBBO_IP_TO_BIND — 監聽IP地址

DUBBO_PORT_TO_BIND — 監聽端口

假設我們的宿主機的ip是29.36.100.95

那麼在根據鏡像創建容器的時候,我們可以通過-e設置DUBBO_IP_TO_REGISTRY的值,下面是我的測試環境的創建設置語句

docker run -d --name xxx -e DUBBO_IP_TO_REGISTRY=29.36.100.95 -p 10010:10010 xxx

配置成功後,可以通過dubbo控制檯,或者直接讀取zk的節點信息,可以看到註冊到zk上的ip地址爲宿主機ip地址

想了解docker四種網絡模式可參考(https://blog.csdn.net/qq_43570369/article/details/91504306

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章