Eureka客户端无法使用docker连接到服务器

Eureka客户端无法使用docker连接到服务器,docker,netflix-eureka,Docker,Netflix Eureka,当我通过Intellij启动zuul和eureka时,一切正常,zuul已在eureka服务器上注册。在eureka服务器中我看到 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 (repli

当我通过Intellij启动zuul和eureka时,一切正常,zuul已在eureka服务器上注册。在eureka服务器中我看到

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)
但是,当我尝试在zuul容器中使用docker compose up-d
docker启动这两个服务时,我有一个例外:

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]
zuul属性文件包含以下行:

eureka.client.service-url.default-zone=http://eureka:8761/eureka/
docker-compose.yml文件(相关服务)

在这两个Dockerfile中,我只是将jar添加到容器中,并使用
java-jar
命令启动jar。我用
@enableurekaclient
注释了zuul主类,用
@enableurekaserver
注释了eureka主类。我不认为这个异常与zuul有关,因为我的其他微服务也有同样的问题。其他人也无法连接到尤里卡


当我在容器中或通过intellij启动eureka时,我可以访问eureka仪表板。我甚至试着用图片代替我的,但我得到了同样的例外。我还尝试了docker exec“zuul”-it bash,在zuul容器中我尝试了
curl eureka:8761
,我可以正常访问仪表板。

不确定eureka,但nginx代理服务器也有类似的问题。Nginx无法识别docker的主机解析器,我使用的一种可能的解决方案是获取特定容器服务的静态IP

对于这种情况,可以为Eureka容器设置staic IP,并在Zuul的配置文件中使用它

当然,如果您有一个Eureca容器,这将起作用。很多情况下,容器应该看看zuul如何读取和理解docker的主机解析器

eureka.client.service-url.default-zone=http://eureka:8761/eureka/
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