【问题标题】:Could not connect to eureka server from docker无法从 docker 连接到 eureka 服务器
【发布时间】:2019-10-12 05:51:49
【问题描述】:

我正在尝试从 docker 容器连接到 eureka 服务器。

eureka 服务器通过“java -jar eureka-server.jar”命令运行。 eureka 客户端运行在 docker 容器上。

Eureka 服务器配置为:

eureka:
  instance:
    hostname: eurekaserver
  client:
    registerWithEureka: true
    fetchRegistry: true
    serviceUrl:
      defaultZone: http://eurekaserver:8080/eureka/

Eureka 客户端配置为:

spring:
  application:
    name: client-application
server:
  port: 8081
eureka:
  client:
    serviceUrl:
      defaultZone: http://eurekaserver:8080/eureka/

例如,我也尝试直接设置 ip-address

eureka:
  client:
    serviceUrl:
      defaultZone: http://1.2.3.4:8080/eureka/

但是,不幸的是,我正面临堆栈跟踪:

[2019-05-26 09:44:14.714] slf4j - 1  INFO [main] --- o.a.h.i.c.DefaultHttpClient: Retrying connect to {}-> http://eurekaserver:8080
[2019-05-26 09:44:15.717] slf4j - 1 ERROR [main] --- c.n.d.s.t.d.RedirectingEurekaHttpClient: Request execution error
com.sun.jersey.api.client.ClientHandlerException: java.net.NoRouteToHostException: No route to host (Host unreachable)
    at com.sun.jersey.client.apache4.ApacheHttpClient4Handler.handle(ApacheHttpClient4Handler.java:187)
    at com.sun.jersey.api.client.filter.GZIPContentEncodingFilter.handle(GZIPContentEncodingFilter.java:123)
    at com.netflix.discovery.EurekaIdentityHeaderFilter.handle(EurekaIdentityHeaderFilter.java:27)
    at com.sun.jersey.api.client.Client.handle(Client.java:652)
    at com.sun.jersey.api.client.WebResource.handle(WebResource.java:682)
    at com.sun.jersey.api.client.WebResource.access$200(WebResource.java:74)
    at com.sun.jersey.api.client.WebResource$Builder.get(WebResource.java:509)
    ...
Caused by: java.net.NoRouteToHostException: No route to host (Host unreachable)
    at java.net.PlainSocketImpl.socketConnect(Native Method)
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
    at java.net.Socket.connect(Socket.java:589)
    at org.apache.http.conn.scheme.PlainSocketFactory.connectSocket(PlainSocketFactory.java:120)
    at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:179)
    at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:144)
    at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:134)
    at org.apache.http.impl.client.DefaultRequestDirector.tryConnect(DefaultRequestDirector.java:612)
    at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:447)
    at org.apache.http.impl.client.AbstractHttpClient.doExecute(AbstractHttpClient.java:884)
    at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:117)
    at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:55)
    at com.sun.jersey.client.apache4.ApacheHttpClient4Handler.handle(ApacheHttpClient4Handler.java:173)
    ... 72 common frames omitted

这就是原因

com.netflix.discovery.shared.transport.TransportException: Cannot execute request on any known server

所以我的问题是如何解决连接问题? docker和eureka放在同一台机器上,因为curl "http://1.2.3.4:8080/eureka/apps"这个命令给我返回app

我该如何做一些调查,为什么 docker 无法解析主机?

附言我知道问题,当 eureka-client 查看 localhost 主机名时,但看起来像我的问题另一个。

谢谢。

【问题讨论】:

    标签: spring-boot docker netflix-eureka


    【解决方案1】:

    已解决。 问题的原因是,不要使用

    registerWithEureka: true
    fetchRegistry: true
    

    更多关于,在谷歌中输入属性名称后首先找到链接

    但是如果你使用它们,那么你必须将serviceUrl 设置为主机名并添加 instance.preferUseIpAddress: true

    附言不确定是否完全可以解决这个问题,但是,我已经在应用程序配置中进行了更改。

    【讨论】:

      猜你喜欢
      • 2019-08-06
      • 1970-01-01
      • 2019-12-23
      • 1970-01-01
      • 2019-09-30
      • 2019-10-11
      • 2018-12-20
      • 2018-09-21
      • 2021-10-25
      相关资源
      最近更新 更多