解決SpringBoot在Docker執行註冊IP不正確的問題
阿新 • • 發佈:2019-02-02
在開發中經常會碰到SpringBoot應用在啟動成功以後,發現註冊到註冊中心的IP不是自己想要的。實際開發聯調的時候也經常碰到自己本地啟動應用怎麼獲取到一個怪怪的IP,通過別的機器無法連線到這個IP。發現有虛擬機器的時候,就把虛擬機器網絡卡停掉,然後才能獲取本地區域網IP。當然也可以每個服務都指定IP的方式來解決這個問題,只有幾個例項還可以,但是有幾十或者上百個例項如何解決呢?
出現這種問題的原因是當前機器有多個網絡卡(如有虛擬網絡卡)造成的,SpringBoot在獲取IP的時候無法獲取到正確的IP,在實際生產環境中伺服器本身也有多塊網絡卡,SpringBoot啟動時只能選擇一個IP,能否通過簡單的配置就能解決這個問題呢?答案是,可以的,SpringBoot本身自帶這種功能。
SpringBoot提供了三種配置方式,可以單獨使用,也可以混合使用。
配置忽略網路介面
使用Docker中執行SpringBoot服務時,服務註冊的時候,可以忽略掉一些指定名稱的網路介面,想要忽略的網路介面的名稱可以使用正則表示式來配置。下面的配置就是忽略名稱為docker0網路介面和所有名稱以veth開頭的網路介面:
application.yml.
spring:
cloud:
inetutils:
ignoredInterfaces:
- docker0
- veth.*
配置使用指定網路介面
相反,也可以使用正則表示式配置只使用指定的網路介面地址,下面配置的例子就只使用192.168開頭和10.0開頭的ip地址,其他的地址都不會使用。
bootstrap.yml.
spring:
cloud:
inetutils:
preferredNetworks:
- 192.168
- 10.0
配置使用site-local地址
如果SpringBoot服務只是在區域網內使用,不會被外部呼叫的話,就可以使用site-local方式配置,配置方式如下:
.application.yml
spring:
cloud:
inetutils:
useOnlySiteLocalInterfaces: true
你在實際使用過程中是否也碰到了這種問題呢?幫你解決問題了嗎?有問題可以加我的微信(zhuzhsh)或者關注我的公眾號(xtech100)持續關注喲!