2017-06-22 35 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配置。

相关问题