使用 Docker 部署的微服務(wù)在 Nacos 里注冊(cè)成內(nèi)網(wǎng)地址 導(dǎo)致無法微服務(wù)間互相調(diào)用的解決方案
遇到問題:
一般情況下,微服務(wù)采用docker部署,通常默認(rèn)采用 bridge 橋接的網(wǎng)絡(luò)模式,docker 會(huì)自動(dòng)分配一個(gè) 172.x.x.x 這樣的私有內(nèi)網(wǎng)地址,存在這樣的難題:
由于是 172開頭的內(nèi)部網(wǎng)絡(luò)地址, 在本機(jī)的docker 內(nèi)是可以訪問,而 跨主機(jī) 就無法訪問。
在使用了nacos 后,nacos 里注冊(cè)的服務(wù)地址是 172 開頭的,導(dǎo)致 微服務(wù)間調(diào)用失敗。
解決方法:
- 采用 host 模式
創(chuàng)建出來的容器沒有獨(dú)立ip,無法產(chǎn)生網(wǎng)絡(luò)隔離的效果,它占用宿主機(jī)的IP。
注意:docker 在 linux 系統(tǒng) 下才支持 host 模式。mac 無法使用,我在這里坑半天。
- 采用 bridge模式,做端口映射
將 容器的端口號(hào) 映射到 宿主機(jī)的端口號(hào),在被訪問時(shí)通過宿主機(jī)的IP和端口來訪問。
在 使用 springcloud微服務(wù)時(shí),單個(gè)服務(wù)在向注冊(cè)中心注冊(cè)的時(shí)候可以指定注冊(cè)ip,這樣就不會(huì)自動(dòng)注冊(cè)成 docker 容器的私有ip。
在 Nacos 下配置
使用的是nacos注冊(cè)中心,指定 spring.cloud.nacos.discovery.ip = 宿主機(jī)的IP,這樣注冊(cè)到 Nacos 的微服務(wù)ip就是這里指定的宿主機(jī)IP 了,在Nacos里顯示是宿主機(jī)的IP, 進(jìn)行服務(wù)間訪問的時(shí)候也是用這個(gè)ip,就不會(huì)出現(xiàn)無法訪問了。
關(guān)鍵是:
spring.cloud.nacos.discovery.ip = 宿主機(jī)的IP
擴(kuò)展知識(shí)
在使用docker run創(chuàng)建Docker容器時(shí),可以用–network標(biāo)志 選項(xiàng)指定容器的網(wǎng)絡(luò)模式,Docker有以下4種網(wǎng)絡(luò)模式:文章來源:http://www.zghlxwxcb.cn/news/detail-741620.html
host模式:使用 --net=host 指定。
bridge模式:使用 --net=bridge 指定,默認(rèn)設(shè)置。
none模式:使用 --net=none 指定。
host模式
host模式類似于Vmware的橋接模式,與宿主機(jī)在同一個(gè)網(wǎng)絡(luò)中,但沒有獨(dú)立IP地址。一個(gè)Docker容器一般會(huì)分配一個(gè)獨(dú)立的Network Namespace。但如果啟動(dòng)容器的時(shí)候使用host模式,那么這個(gè)容器將不會(huì)獲得一個(gè)獨(dú)立的Network Namespace,而是和宿主機(jī)共用一個(gè)Network Namespace。容器將不會(huì)虛擬出自己的網(wǎng)卡,配置自己的IP等,而是使用宿主機(jī)的IP和端口。文章來源地址http://www.zghlxwxcb.cn/news/detail-741620.html
到了這里,關(guān)于【Docker】使用 Docker 部署的微服務(wù)在 Nacos 里注冊(cè)成內(nèi)網(wǎng)地址 導(dǎo)致無法微服務(wù)間互相調(diào)用的解決方案...的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!