首页 文章

Eureka,ZUUL,Docker撰写桥接网络java.net.ConnectException:连接被拒绝

提问于
浏览
0

我在具有简约配置的独立docker容器上运行Zuul服务和Eureka服务(两者都是spring boot项目) .

尤里卡:

泊坞窗,compose.xml:

version: '2'
services:
  app:
    build:
      context: ./
    image: eureka
    environment:
      eureka.client.serviceUrl.defaultZone: http://eurekaserver_app_1:8070/eureka/
    tty: false
    network_mode: bridge
    ports:
      - 8070:8070

DockerFile:

FROM java:8
COPY ./build/libs/eureka-server-0.0.1-SNAPSHOT.jar /usr/src/eureka/
WORKDIR /usr/src/eureka
EXPOSE 8070
CMD ["java","-jar","eureka-server-0.0.1-SNAPSHOT.jar"]

Zuul:

泊坞窗,compose.xml:

version: '2'
services:
  app:
    build:
      context: ./
    image: zuul-service
    environment:
      eureka.client.serviceUrl.defaultZone: http://eurekaserver_app_1:8070/eureka/
    tty: false
    ports:
      - 8069:8069
    network_mode: bridge

DockerFile:

FROM java:8
COPY ./build/libs/zuul-service-0.0.1-SNAPSHOT.jar /usr/src/item/
WORKDIR /usr/src/item
EXPOSE 8069
ENTRYPOINT ["java","-jar","zuul-service-0.0.1-SNAPSHOT.jar"]

我使用 network ls --no-trunc Docker命令确保它们没有启动新网络:

NETWORK ID                                                         NAME                DRIVER              SCOPE
ba216f3e01bb168848074a99875666fe382a4eda15daad0c428a8102707ee49f   bridge              bridge              local
a63a8adf0fd162d9b99bdf77bc4a13c0bfcfb8a9aca3c5375e60d5df5c5e305d   host                host                local
2debbe96f8a96fdd8d6da983877609e0bdb7a1df6b25537f35f1608de0739fc7   none                null                local

这似乎没问题,问题是Eureka容器正常启动,但是当我使用 docker-compose up 时,zuul-service不是 . 它抛出:

com.sun.jersey.api.client.ClientHandlerException: java.net.ConnectException: Connection refused (Connection refused)
app_1  |    at com.sun.jersey.client.apache4.ApacheHttpClient4Handler.handle(ApacheHttpClient4Handler.java:187) ~[jersey-apache-client4-1.19.1.jar!/:1.19.1]
app_1  |    at com.sun.jersey.api.client.filter.GZIPContentEncodingFilter.handle(GZIPContentEncodingFilter.java:123) ~[jersey-client-1.19.1.jar!/:1.19.1]
app_1  |    at com.netflix.discovery.EurekaIdentityHeaderFilter.handle(EurekaIdentityHeaderFilter.java:27) ~[eureka-client-1.8.6.jar!/:1.8.6]
app_1  |    at com.sun.jersey.api.client.Client.handle(Client.java:652) ~[jersey-client-1.19.1.jar!/:1.19.1]
app_1  |    at com.sun.jersey.api.client.WebResource.handle(WebResource.java:682) ~[jersey-client-1.19.1.jar!/:1.19.1]
app_1  |    at com.sun.jersey.api.client.WebResource.access$200(WebResource.java:74) ~[jersey-client-1.19.1.jar!/:1.19.1]
app_1  |    at com.sun.jersey.api.client.WebResource$Builder.get(WebResource.java:509) ~[jersey-client-1.19.1.jar!/:1.19.1]
app_1  |    at com.netflix.discovery.shared.transport.jersey.AbstractJerseyEurekaHttpClient.getApplicationsInternal(AbstractJerseyEurekaHttpClient.java:194) ~[eureka-client-1.8.6.jar!/:1.8.6]

我不确定我在这里可能会缺少什么?

1 回答

  • 1

    官方Docker Compose docamantation说:

    默认情况下,Compose为您的应用设置单个网络 . 服务的每个容器都加入默认网络,并且该网络上的其他容器都可以访问它们,并且它们可以在与容器名称相同的主机名上发现 .

    我建议你为两个应用程序创建一个 docker-compose.yaml 文件,正确命名它们并将 Dockerfiles 分隔到不同的文件夹:

    version: '2'
    services:
      eureka:
        build:
          context: ./eureka/
        image: eureka
        environment:
          eureka.client.serviceUrl.defaultZone: http://eureka:8070/eureka/
        tty: false
        ports:
          - 8070:8070
      zuul:
        build:
          context: ./zuul/
        image: zuul-service
        environment:
          eureka.client.serviceUrl.defaultZone: http://eureka:8070/eureka/
        tty: false
        ports:
          - 8069:8069
    

    当容器启动时,它们将能够相互之间通过 eureka:8070zuul:8069 进行通信 .

相关问题