简体   繁体   中英

Eureka client cannot connect to server with docker

When I start zuul and eureka through Intellij, everything is fine, zuul is registered on eureka-server. In eureka server I see

2019-03-15 18:00:20.727  INFO 31713 --- [nio-8761-exec-2] c.n.e.registry.AbstractInstanceRegistry  : Registered instance ZUUL-SERVER/192.168.0.11:zuul-server:8762 with status UP (replication=false)
2019-03-15 18:00:21.309  INFO 31713 --- [nio-8761-exec-3] c.n.e.registry.AbstractInstanceRegistry  : Registered instance ZUUL-SERVER/192.168.0.11:zuul-server:8762 with status UP (replication=true)

But when I try to start these two services with docker using docker-compose up -d in zuul container I have exception:

com.netflix.discovery.shared.transport.TransportException: Cannot execute request on any known server
    at com.netflix.discovery.shared.transport.decorator.RetryableEurekaHttpClient.execute(RetryableEurekaHttpClient.java:112) ~[eureka-client-1.9.3.jar!/:1.9.3]
    at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.getApplications(EurekaHttpClientDecorator.java:134) ~[eureka-client-1.9.3.jar!/:1.9.3]
    at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator$6.execute(EurekaHttpClientDecorator.java:137) ~[eureka-client-1.9.3.jar!/:1.9.3]
    at com.netflix.discovery.shared.transport.decorator.SessionedEurekaHttpClient.execute(SessionedEurekaHttpClient.java:77) ~[eureka-client-1.9.3.jar!/:1.9.3]
    at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.getApplications(EurekaHttpClientDecorator.java:134) ~[eureka-client-1.9.3.jar!/:1.9.3]
    at com.netflix.discovery.DiscoveryClient.getAndStoreFullRegistry(DiscoveryClient.java:1051) ~[eureka-client-1.9.3.jar!/:1.9.3]
    at com.netflix.discovery.DiscoveryClient.fetchRegistry(DiscoveryClient.java:965) ~[eureka-client-1.9.3.jar!/:1.9.3]
    at com.netflix.discovery.DiscoveryClient.<init>(DiscoveryClient.java:414) ~[eureka-client-1.9.3.jar!/:1.9.3]
    at com.netflix.discovery.DiscoveryClient.<init>(DiscoveryClient.java:269) ~[eureka-client-1.9.3.jar!/:1.9.3]
    at org.springframework.cloud.netflix.eureka.CloudEurekaClient.<init>(CloudEurekaClient.java:63) ~[spring-cloud-netflix-eureka-client-2.1.0.M1.jar!/:2.1.0.M1]
    at org.springframework.cloud.netflix.eureka.EurekaClientAutoConfiguration$RefreshableEurekaClientConfiguration.eurekaClient(EurekaClientAutoConfiguration.java:290) ~[spring-cloud-netflix-eureka-client-2.1.0.M1.jar!/:2.1.0.M1]
    at org.springframework.cloud.netflix.eureka.EurekaClientAutoConfiguration$RefreshableEurekaClientConfiguration$$EnhancerBySpringCGLIB$$8fcb0d88.CGLIB$eurekaClient$2(<generated>) ~[spring-cloud-netflix-eureka-client-2.1.0.M1.jar!/:2.1.0.M1]

Version of spring-boot-starter-parent is 2.1.2.RELEASE and spring-cloud version fot both eureka and zuul is Greenwich.M1

eureka-server properties file:

# Give a name to the eureka server
spring.application.name=eureka-server

# default port for eureka server
server.port=8761

# eureka by default will register itself as a client. So, we need to set it to false.
# What's a client server? See other microservices (image, gallery, auth, etc).
eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false

zuul-properties file contains this line:

eureka.client.service-url.default-zone=http://eureka:8761/eureka/

docker-compose.yml file(related services)

version: "2"

services:
  eureka:
    container_name: eureka
    build:
      context: .
      dockerfile: eureka.Dockerfile
    image: eureka-service
    ports: 
      - "8761:8761"
    networks:
      - event-network

  zuul:
    container_name: zuul
    build:
      context: .
      dockerfile: zuul.Dockerfile
    image: zuul-service
    ports: 
      - "8762:8762"
    networks:
      - event-network

networks:
  event-network:
    driver: bridge

In both Dockerfile's I just add jar to container and start jar with java -jar command. I annotated zuul main class with @EnableEurekaClient and eureka main class with @EnableEurekaServer . I don't think that exception is related to zuul since I have the same problem with rest of my microservices. Rest of them also cannot connect to eureka.

When I start eureka both in container or through intellij I can access eureka dashboard. I even tried to put this image instead of mine, but I got the same exception. I also tried docker exec "zuul" -it bash and inside that zuul container I tried curl eureka:8761 , and I can access dashboard normally.

Not sure about Eureka but had similar problem with nginx proxy server. Nginx can't recognize docker's hosts resolver, and one possible solution that I used is get static IP of specific container's service.

For that case is possible set staic IP for Eureka container and use it within config file for Zuul.

Of course that will work if you will have one Eureca container. For a lot containers should look how zuul can read and understand docker's host resolver.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM