解決SpringBoot在Docker運行注冊IP不正確的問題

在開發(fā)中經(jīng)常會碰到SpringBoot應(yīng)用在啟動成功以后,發(fā)現(xiàn)注冊到注冊中心的IP不是自己想要的。實際開發(fā)聯(lián)調(diào)的時候也經(jīng)常碰到自己本地啟動應(yīng)用怎么獲取到一個怪怪的IP,通過別的機器無法連接到這個IP。發(fā)現(xiàn)有虛擬機的時候,就把虛擬機網(wǎng)卡停掉,然后才能獲取本地局域網(wǎng)IP。當(dāng)然也可以每個服務(wù)都指定IP的方式來解決這個問題,只有幾個實例還可以,但是有幾十或者上百個實例如何解決呢?

出現(xiàn)這種問題的原因是當(dāng)前機器有多個網(wǎng)卡(如有虛擬網(wǎng)卡)造成的,SpringBoot在獲取IP的時候無法獲取到正確的IP,在實際生產(chǎn)環(huán)境中服務(wù)器本身也有多塊網(wǎng)卡,SpringBoot啟動時只能選擇一個IP,能否通過簡單的配置就能解決這個問題呢?答案是,可以的,SpringBoot本身自帶這種功能。

SpringBoot提供了三種配置方式,可以單獨使用,也可以混合使用。

配置忽略網(wǎng)絡(luò)接口

使用Docker中運行SpringBoot服務(wù)時,服務(wù)注冊的時候,可以忽略掉一些指定名稱的網(wǎng)絡(luò)接口,想要忽略的網(wǎng)絡(luò)接口的名稱可以使用正則表達式來配置。下面的配置就是忽略名稱為docker0網(wǎng)絡(luò)接口和所有名稱以veth開頭的網(wǎng)絡(luò)接口:

  • application.yml.

    spring:
      cloud:
        inetutils:
          ignoredInterfaces:
            - docker0
            - veth.*
    

配置使用指定網(wǎng)絡(luò)接口

相反,也可以使用正則表達式配置只使用指定的網(wǎng)絡(luò)接口地址,下面配置的例子就只使用192.168開頭和10.0開頭的ip地址,其他的地址都不會使用。

  • bootstrap.yml.

    spring:
      cloud:
        inetutils:
          preferredNetworks:
            - 192.168
            - 10.0
    

配置使用site-local地址

如果SpringBoot服務(wù)只是在局域網(wǎng)內(nèi)使用,不會被外部調(diào)用的話,就可以使用site-local方式配置,配置方式如下:

  • application.yml

    spring:
      cloud:
        inetutils:
          useOnlySiteLocalInterfaces: true
    
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容