1. 程式人生 > >docker 部署 springcloud 服務中容器ip的問題 坑了幾天

docker 部署 springcloud 服務中容器ip的問題 坑了幾天

  • 業務場景描述:

     

    微服務情況下,需要隨時可以啟動任意多個docker例項來進行分散式負載。(比如搶紅包,活動秒殺等)

     

    需要解決的問題如下:

    多宿主機情況,即docker例項可以在多臺機器上任意部署。 
    使用spring cloud作為微服務方案。(如果不用spring cloud的話,直接使用docker swarm已經基本能滿足要求)

    遇到的問題:

    docker直接註冊IP為容器IP,跨宿主機時無法訪問,或需要使用第三方來link,很煩。 
    如果使用hostname來註冊,則需要維護hostname表,更煩。 

    之前由於大部分業務直接跑docker swarm解決了,也沒有深究下去,今年準備弄一個簡單的基於spring boot的監控玩玩,結果發現去年的技術債還是要解決,跨宿主機docker無法註冊。

    其實解決的方法很簡單,就是把需要動態的值都當引數傳遞給spring boot 和 docker


    docker run -d --name auxplat-helloworld --expose=6999 -p 6999:6999 -e "EUREKA_INSTANCE_IP-ADDRESS=100.100.20.214" -e "SERVER_PORT=6999" aux/auxplat-helloworld 
    docker run -d --name auxplat-helloworld-1 --expose=6998-p 6998:6998-e "EUREKA_INSTANCE_IP-ADDRESS=100.100.20.214" -e "SERVER_PORT=6998"
    aux/auxplat-helloworld 
    docker run -d --name auxplat-helloworld --expose=6999 -p 6999:6999 -e "EUREKA_INSTANCE_IP-ADDRESS=100.100.20.212" -e "SERVER_PORT=6999" aux/auxplat-helloworld 

    前兩條在 100.100.20.214 上 跑兩個 6999 和 6998 的docker例項。

     

    第三條在100.100.20.212 上跑個 6999的例項