2017-06-22 14 views
4

Docker Data Centerでいくつかのマイクロサービスを実行しています。私はサービス/アプリケーション全体で同じユーレカの設定をしています。しかし、アプリケーションの中には、コンテナIDではなくeth0のIPアドレスで登録しているものがあります。SpringbootクライアントがDockerコンテナIDを使用してEurekaに登録できません

私はpreferIpAddressfalseと設定しようとしましたが、それは常に強制されていません。

パターンがありません。以前の配備中にコンテナIDを登録した同じサービスは、もう一度IPで登録されます。私は自分のサービスが常にそのコンテナIDで登録されるようにしたい。それを強制する方法はありますか、私は何かを逃していますか?

注:私はまた、レジストリ、デプロイメントノードからすべての古いドッカーイメージをクリアし、ゼロから試しました。

ユーレカサーバー設定:

​​

Microservicesクライアントの設定(これは、すべてのmicroservices間で同じである)

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

ドッカーでは、container-idはデフォルトでコンテナのホスト名として設定されます。コンテナはコンテナID(またはここでホスト名)を使用して互いに話すことができます

この問題は、ipではなくhostnameを優先することで解決できます。登録はホスト名によって起こることを確認するの

しかし、唯一の方法は、ドッキングウィンドウにeureka.instance.hostnamereference

を設定することであるあなたがのために(シェルスクリプトとしてエントリー・ポイントを使用してホスト名から実行時にコンテナ-IDを設定することができますたとえば、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}を追加することを確認する必要がありnfo in documentation

更新:これはまた、endpoint_mode: dnsrrを使用して修正することができます(確認する必要があります)。 Refer this

1

クライアントにeureka.instance.hostnameを設定してみてくださいconfig。

関連する問題