![](/img/trans.png)
[英]Running Eureka Server and Eureka Client in Docker using spring boot
[英]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.