2017-02-24 59 views
0

我們遇到以下問題,部署多個微服務時,隨機有時其中一個在註冊表中使用不正確的IP註冊。我明白尤里卡是錯誤地識別容器的IP ... 我們測試了幾個像這個application.yml配置的解決方案,但我們沒有得到它的正常工作。有任何想法嗎?Jhipster註冊表從Eureka獲取錯誤的IP(Docker部署)

eureka: 
    instance: 
     prefer-ip-address: true 
     hostname: ${server.address} 
     ip-address: ${server.address} 

我看到這個解決方案在這裏:https://groups.google.com/d/msg/jhipster-dev/n7s7OTgT18E/RtZ3O4hlEwAJ

但這種配置拋出「無法解析佔位符‘server.address’的字符串值」。這是有道理的,當我讀到這個:Reference a key in application.yml

+0

您是否確保所有服務都使用自定義實例id爲eureka註冊了自己?也許尤里卡提供服務舊ips,記住由編號 –

+0

是的,實例ID是一個隨機值:instanceId:sd_api:$ {spring.application.instance_id:$ {random.value}} – Snowblind

+0

我注意到問題發生在我重定向一個容器中的一個端口。如果容器暴露一個端口,則Eureka註冊一個錯誤的IP。 – Snowblind

回答

0

@snowblind這可能是碼頭集裝箱網絡的一個問題。實際上,在進行初始註冊時,Eureka僅使用應用程序內可用的內容。所以它會通過類似java.net.InetAddress的地址來確定它的地址,然後將這個值傳播給註冊中心來宣傳如何到達服務。但在你的情況下,它似乎在報告錯誤的信息。

因此,首先確保您始終將容器端口映射到相同的主機端口。或者,您可以使用docker host networking(--net = host),以便您的容器與您的主機共享相同的網絡接口。通過將net: "host"添加到服務描述中,可以在docker-compose中執行此操作。

另一個想法是使用基於主機名的Eureka註冊,而不是基於IP的默認配置(preferred-ip-adress = true),但我不能保證它會工作,因爲我從來沒有嘗試過如果你想這樣做,請親自參考Eureka文檔。

+0

我在我的docker-compose上使用network_mode:host,但仍然發生同樣的問題。使用主機名稱,但我們需要使用IP(其他一些服務需要此信息)。謝謝您的幫助! – Snowblind