spring-boot - 使用docker时,如何在Eureka Client中保持Eureka服务器URL动态?

标签 spring-boot docker docker-compose microservices fabric8-maven-plugin

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

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

问题是,在Docker容器中运行应用程序时,我必须为Eureka Client指定Eureka Server容器名称。但是,如果我直接将其作为“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容器中,它们将起作用。这样避免了预先提供静态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

关于spring-boot - 使用docker时,如何在Eureka Client中保持Eureka服务器URL动态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61753872/

相关文章:

java - 如何在 Spring Boot 中创建完全自定义的查询

docker - 由于发生权限被拒绝,无法 ssh 到 docker(ubuntu :19. 04)

mongodb - 如何使用 NFS 部署具有持久卷的单实例 mongodb

amazon-web-services - 以相同的方式设置 Kubernetes 集群以进行本地开发和测试和部署

mysql - Docker compose mysql 可在端口 3306 上访问

nginx - Docker + Nginx + ngx_http_image_filter_module

mysql - 用户 'root' @'172.28.1.5' 的 Docker 访问被拒绝(使用密码 : NO))

java - Spring批处理spring jpa错误CannotCreateTransactionException : Could not open JPA EntityManager for transaction IllegalStateException:

java - 如何解决自定义存储库 JPA 中的错误 "error in your SQL syntax"

java - Spring Boot Multi-Tenancy 每个架构问题