docker 部署 springcloud 服務中容器ip的問題 坑了幾天
阿新 • • 發佈:2019-01-09
業務場景描述:
微服務情況下,需要隨時可以啟動任意多個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"
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的例項