Как мне сохранить динамический URL-адрес сервера Eureka в клиенте Eureka при использовании докера?

Я использую docker-maven-plugin fabric8 для создания образа для моих загрузочных микросервисов Spring.

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

Проблема в том, что при запуске приложения в контейнерах докеров я должен указать имя контейнера сервера Eureka для клиента Eureka. Но если я запускаю его напрямую как "Spring Boot APP", я должен использовать "Localhost:8761/Eureka". Есть ли способ заставить его работать как с докером, так и без него, как показано ниже?

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

Я не могу передать значение "EUREKA_SERVER" из плагина fabrib8. Я пробовал приведенный ниже код передать значение, но он не работает.

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

1 ответ

Решение

Spring может подбирать переменные среды. Поэтому, если вы добавите переменные среды в контейнер Docker, в котором работает Spring Boot, они будут работать. Это позволяет избежать необходимости заранее указывать статический 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

Другие вопросы по тегам