Docker Compose - имя службы не работает как переменная среды - PullRequest
0 голосов
/ 26 апреля 2020

Я пытаюсь использовать docker -создать для настройки проекта Spring Cloud.

Я использую конфигурацию Spring Cloud, поэтому у меня есть сервер конфигурации и некоторые службы.

На данный момент у меня есть 3 службы в моем docker -compose.yml

version: '3'

services:
    db:
        image: mysql
        restart: always
        environment: 
            MYSQL_ROOT_PASSWORD: 'root' # TODO: Change this
            MYSQL_USER: 'user'
            MYSQL_PASS: 'password'
            MYSQL_ROOT_HOST: '%'
        volumes:
            - "db:/opt/mysql/docker:rw"
        ports:
            - "3307:3306"

    config:
        image: config-server
        restart: always
        depends_on:
            - db
        environment:
            - SPRING_DATASOURCE_URL=jdbc:mysql://db:3306/ec_settings?createDatabaseIfNotExist=true&useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC                
        ports:
            - "8100:8100"

    gateway:
        image: gateway
        restart: always
        depends_on:
            - config
        environment:
            - CONFIG_URI=http://config:8100
        ports:
            - '8081:8080'

volumes:
    db: {}

В микросервисе шлюза, в bootstrap .yml, у меня есть этот параметр

spring:
  cloud:
    config:
      uri: ${CONFIG_URI}

Когда я поднял docker composer я вижу, что служба шлюза пытается получить конфигурацию из http://config:8100

 Fetching config from server at : http://config:8100

Итак, переменная переходит к Spring Boot, но docker -compose не заменяет название сервиса с его актуальной ссылкой. Очень странная вещь заключается в том, что переменная окружения SPRING_DATASOURCE_URL правильно переведена в службу конфигурации для подключения к службе БД.

1 Ответ

0 голосов
/ 27 апреля 2020

Я наконец решил это благодаря этой ссылке Docker - SpringConfig - Соединение отказало в ConfigServer

Проблема заключалась в том, что служба пыталась получить URL-адрес конфигурации слишком рано. Решение состоит в том, чтобы поставить bootstrap .yml эти настройки

spring:
  cloud:
    config:
      fail-fast: true
      retry:
        max-attempts: 20
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...