spring cloud之docker微服務客戶端注冊eureka問題


 

正常我們起一個微服務注冊到eureka他的實例id是默認這樣的主機名稱:服務名稱:服務端口號,

如果配置eureka.instance.prefer-ip-address=true則實例id為主機Ip:服務名稱:服務端口號

當然我們也可以通過eureka.instance.instance-id自定義實例ID格式。

但是當我們以docker化微服務的時候發現注冊到eureka中的實例ID變為containerId:服務名稱:服務端口號

而且docker 容器每重啟一次(這里指刪除容器重啟,containerId變化),就多一個該服務的實例如d1deb75f7aed:rms:8080,並且被刪除的容器實例d2b59f32b427:rms:8080不下線

 

 

 

問題1:怎么讓容器啟的微服務也注冊為{主機名稱:服務名稱:服務端口號}或{主機Ip:服務名稱:服務端口號}?   

指定容器網絡模式為host,如:

docker run -d --name rms --net host cm/rms:latest

 

 

 

為什么要指定網絡模式host:

  • –net=bridge— 默認選項,用網橋的方式來連接docker容器。
  • –net=host— docker跳過配置容器的獨立網絡棧。
  • –net=container:NAME_or_ID— 告訴docker讓這個新建的容器使用已有容器的網絡配置。
  • –net=none— 告訴docker為新建的容器建立一個網絡棧,但不對這個網絡棧進行任何配置,所以只能訪問本地網絡,沒有外網。

詳細請點鏈接:https://blog.csdn.net/weixin_38319645/article/details/81349541

問題2:怎么讓停掉的容器服務下線?

通過api強制下線

  DELETE http://{ip}:{port}/eureka/apps/{appName}/{inatanceId}

  如:http://ip:port/eureka/apps/rms/10d4a6d7e8a6:rms:8080

通過自定義實例id,讓后起的實例擠掉先起的失效實例

配置文件中指定instance-id:

spring.application.name=rms
server.port=8080
eureka.instance.instance-id=${spring.application.name}:${server.port}
eureka.instance.prefer-ip-address=true

 

這樣不管怎么啟服務,他的Id都是一樣的,后起的會把之前的擠掉。至少不會因為containerId變化導致的實例id不同,讓實例一直增加。

我們從頁面上繼續看這個ID后面是啥?

 

 

 

目前還沒找到辦法讓container停止服務自動下線方法

已解決: https://www.cnblogs.com/dreamfly2016/p/11698759.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM