【发布时间】: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