繁体   English   中英

使用 docker 时,如何在 Eureka 客户端中保持 Eureka 服务器 url 动态?

[英]How do I keep the Eureka server url dynamic in the Eureka Client while using docker?

我正在使用 fabric8 docker-maven-plugin 为我的 Spring 启动微服务构建映像。

<groupId>io.fabric8</groupId>
<artifactId>docker-maven-plugin</artifactId>

问题是在 docker 容器中运行应用程序时,我必须为 Eureka Client 指定 Eureka Server Container 名称。 但是如果我直接将它作为“Spring Boot APP”运行,我必须使用“Localhost:8761/Eureka”。 有没有办法让它在有/没有 docker 的情况下都可以工作,如下所示?

eureka:
  client:
    service-url:
      defaultZone: ${EUREKA_SERVER:http://localhost:8761/eureka}

我无法从 fabrib8 插件传递“EUREKA_SERVER”的值。 我试过下面的代码来传递值,但它不起作用。

<docker.env.JAVA_OPTS>-DEUREKA_SERVER=http://discovery:8761/eureka</docker.env.JAVA_OPTS>

Spring 可以拾取环境变量。 因此,如果您将环境变量添加到 Spring Boot 正在运行的 Docker 容器中,它们将起作用。 这避免了预先提供 static URL 的需要。

如果您使用 Docker Compose,它可能如下所示:

services:
  eureka:
    image: springcloud/eureka
    container_name: eureka
    ports:
      - "8761:8761"
    networks:
      - "discovery"
    environment:
      - EUREKA_INSTANCE_PREFERIPADDRESS=true

  spring:
    build:
      context: .
      dockerfile: ./src/main/docker/Dockerfile
    depends_on:
      - eureka
    container_name: spring
    ports:
     - "8080:8080"
    networks:
     - "discovery"
    environment:
      - EUREKA_SERVICE_URL=http://eureka:8761 // This overrides your Spring Property
      - EUREKA_INSTANCE_PREFER_IP_ADDRESS=true
      - LOGGING_FILE=/tmp/admin.log

注意:由于环境变量不是 YAML,因此您需要稍微更改格式。 https://docs.spring.io/spring-boot/docs/1.5.5.RELEASE/reference/html/boot-features-external-config.html#boot-features-external-config-relaxed-binding

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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