2017-06-22 32 views
4

我有幾個在Docker數據中心運行的微服務。我在服務/應用程序中具有相同的Eureka配置。但是一些應用程序正在使用它們的eth0 IP地址註冊,而不是容器ID。Springboot客戶端無法使用Docker容器註冊到Eureka容器ID

我曾嘗試將preferIpAddress設置爲false,但它並不是一直執行。

沒有模式。另一次在上次部署期間註冊到容器標識的相同服務也使用IP註冊。我希望我的服務始終註冊其容器ID。有沒有辦法強制執行或我錯過了什麼?

注意:我也清除了註冊表,部署節點中的所有舊碼頭圖像,並嘗試從頭開始。

尤里卡服務器配置:

​​

微服務客戶端配置(這是在所有微服務一樣)

eureka: 
    client: 
    healthcheck: 
     enabled: true 
    serviceUrl: 
     defaultZone: http://discovery:8761/eureka/ 
    instance: 
    preferIpAddress: false 
    metadataMap: 
     instanceId: ${vcap.application.instance_id:${spring.application.name}:${spring.application.instance_id:${random.value}}} 

尤里卡儀表盤快照: enter image description here

回答

3

在docker中,默認情況下,container-id將被設置爲容器的主機名。容器可以使用container-id(或這裏的主機名)相互通話

所以這個問題可以通過主機名而不是ip來解決。

但是,只有確保註冊碰巧通過主機的方法是通過設置eureka.instance.hostnamereference

在泊塢窗,你可以從主機名設置在運行時的容器ID使用的入口點爲shell腳本(用於例如start.sh)和腳本應該是類似的東西

#!/bin/sh 
export HOST_NAME=`hostname` 
java -Djava.security.egd=file:/dev/./urandom -Xmx1024m -jar /app.jar 

,並確保你在你的application.yml添加eureka.instance.hostname=${HOST_NAME}

我已經添加了相同的I nfo in documentation

更新:看起來像這樣也可以通過在撰寫文件中使用endpoint_mode: dnsrr(必須確認)來修復。 Refer this

1

嘗試在客戶端設置eureka.instance.hostname配置。

相關問題