在使用 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 服务器容器名称指定给 Eureka 客户端。但是如果我运行直接把它当成"Spring Boot APP"我就得用"Localhost:8761/Eureka"了。有没有办法让它同时工作 with/without 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 引导位于 运行 的 Docker 容器中,它们将起作用。这避免了预先提供静态 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
我正在使用 fabric8 docker-maven-plugin 为我的 Spring 引导微服务构建映像。
<groupId>io.fabric8</groupId>
<artifactId>docker-maven-plugin</artifactId>
问题是,当 运行 在 docker 容器中运行应用程序时,我必须将 Eureka 服务器容器名称指定给 Eureka 客户端。但是如果我运行直接把它当成"Spring Boot APP"我就得用"Localhost:8761/Eureka"了。有没有办法让它同时工作 with/without 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 引导位于 运行 的 Docker 容器中,它们将起作用。这避免了预先提供静态 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