【问题标题】:Docker networking not working with eurekaDocker 网络不适用于尤里卡
【发布时间】:2020-05-30 02:25:02
【问题描述】:

我在 docker 容器中有一个 eureka 服务器,在另一个 docker 容器中有另一个应用程序。我使用docker network create eureka-s1 建立了一个网络。所以,我正在使用以下命令运行尤里卡服务器:docker run --network eureka-s1 --name eureka-server -p 8761:8761 f595acb214d5 eureka服务器的配置文件如下:

spring:
  application:
    name: discovery-service

eureka:
  instance:
    prefer-ip-address:true
    hostname:localhost

  client:
    eureka-server-connect-timeout-seconds: 5
    enabled: true
    fetch-registry: false
    register-with-eureka: false

server:
  port: 8761

所以,它运行良好。现在,当我使用命令:docker run --network eureka-s1 --name first-service -p 8080:8080 c16b2442b890 运行我的应用程序时,应用程序没有注册到尤里卡。客户端的配置文件如下:

spring:
  application:
    name: first-service
server:
  port: 8080
eureka:
  client:
    fetch-registry: true
    serviceUrl:
      defaultZone: http://eureka-server:8761/eureka  

有人可以指出这里的问题吗?谢谢。

编辑: 尤里卡服务器 Dockerfile:

FROM openjdk:8
ADD target/cloud-eureka-discovery-service-1.0.0-SNAPSHOT.jar cloud-eureka-discovery-service-1.0.0-SNAPSHOT.jar
EXPOSE 8761
ENTRYPOINT ["java", "-jar", "cloud-eureka-discovery-service-1.0.0-SNAPSHOT.jar"]

Eureka 客户端 Dockerfile:

FROM openjdk:8
ADD target/first-service-0.0.1-SNAPSHOT.jar first-service-0.0.1-SNAPSHOT.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "first-service-0.0.1-SNAPSHOT.jar"]

【问题讨论】:

  • 从应用的容器中你能ping通eureka服务器吗?
  • 是的,这里是统计数据: --- eureka-server ping 统计数据 --- 传输 39 个数据包,接收 39 个数据包,0% 数据包丢失,时间 962ms rtt min/avg/max/mdev = 0.048 /0.113/0.207/0.049 毫秒
  • 那我猜问题出在你的尤里卡服务器配置上。我会尝试使用hostname:localhost。您可以将其更改为 eureka-server 而不是 localhost,或者如果它不是强制性的,则将其删除。在 spring 的 eureka 文档中搜索可能的替代方案。

标签: spring docker spring-cloud netflix-eureka


【解决方案1】:

使用 docker-compose 可以正常工作。

下面是 docker-compose.yml

version: '2.1'

services:
  eureka:
    build: ${PATH_TO_EUREKA_FOLDER}
    mem_limit: 350m
    networks:
        - my-network
    healthcheck:
      test: ["CMD", "curl", "-f", "http://eureka:8761"]
      interval: 30s
      timeout: 10s
      retries: 5

  client:
    build: ${PATH_TO_YOUR_CLIENT_FOLDER}
    mem_limit: 350m
    networks:
      - my-network
    links:
      - eureka
    depends_on:
      eureka:
        condition: service_healthy


networks:
  my-network:
    name: my-network

并添加更新您的客户端配置文件如下:

spring:
    application:
        name: first-service
server:
    port: 8080
eureka:
    client:
        fetch-registry: true
        serviceUrl:
            defaultZone: http://eureka:8761/eureka

并更新eureka服务器的Dockerfile如下:

FROM openjdk:8

RUN apt-get update
RUN apt-get install -y curl

EXPOSE 8761

ADD ./target/*.jar app.jar

ENTRYPOINT ["java","-jar","/app.jar"]

在 docker-compose.yml 旁边运行

docker-compose up --build

别忘了运行 mvn clean install 您的客户端应用程序。

【讨论】:

  • 没用。还有其他建议吗?我也可以尝试在机器上的映射端口上注册,而不是在容器上。有什么建议吗?
  • 你能发布两个 Dockerfile 吗?
  • 你能告诉我 docker run 出了什么问题以及为什么这个解决方案有效吗?
  • 我怀疑你的 eureka 没有暴露在同一个网络中,我们使用 docker-compose 为客户端和 eureka 应用程序指定了同一个网络。
猜你喜欢
  • 2018-05-10
  • 2018-05-12
  • 2016-08-02
  • 1970-01-01
  • 2017-03-26
  • 2018-02-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多