Nacos(注冊中心)是通過 【 IP+PORT】 的形式調(diào)用其他服務爬泥。
問題:
Docker 容器使用虛擬 IP柬讨,當 Docker 中的服務 A,向 Nacos 注冊的時候袍啡,Nacos 獲取到了 Docker 的內(nèi)部 IP踩官,導致另外一個服務 B,想通過注冊中心調(diào)用服務 A境输,但由于服務 B從 nacos 注冊中心獲取到的是服務 A 的內(nèi)部 IP蔗牡,這樣導致了兩個處于公網(wǎng)的微服務之間無法互相訪問。
version: "3"
services:
base:
build: base
container_name: base_1
network_mode: "host" # 與宿主機共有一個IP
ports:
- 8233:8233
volumes:
- ./logs:/logs
當然,配置了上述網(wǎng)絡(luò)類型后畴嘶,nacos 是可以拿到宿主機的 IP蛋逾,但是此時拿到的是宿主機的內(nèi)網(wǎng) IP,解決辦法如下:
spring:
cloud:
inetutils:
ignored-interfaces: eth.* # 忽略網(wǎng)卡窗悯,eth.*区匣,正則表達式
preferred-networks: ${discovery.server-ip} # 選擇符合前綴的IP作為服務注冊IP,discovery.server-ip就是你的公網(wǎng)IP
啟動 Docker 的時候蒋院,用 --network 參數(shù)亏钩,可以指定網(wǎng)絡(luò)類型
--network host
host: 主機網(wǎng)絡(luò)使用 --network=host,此時欺旧,Docker 容器的網(wǎng)絡(luò)會附屬在主機上姑丑,兩者是互通的。 例如辞友,在容器中運行一個 Web 服務栅哀,監(jiān)聽 8080 端口,則主機的 8080 端口就會自動映射到容器中称龙。