Как настроить и запустить Eureka Server, Microservices (Eureka Client), Zuul внутри отдельных док-контейнеров? - PullRequest
0 голосов
/ 02 марта 2019

Я новичок в Spring Boot и Docker.Написаны следующие микросервисы.

  1. Служба регистрации пользователей : создание пользователей в базе данных MySql, а также взаимодействие с «Службой поиска и удаления» с использованием шаблона отдыха и его клиента Eureka.GitHub ссылка
  2. Служба поиска и удаления пользователей : Поиск и удаление из базы данных MySql и ее клиента Eureka.GitHub Ссылка
  3. Eureka Server : используется для обнаружения службы.GitHub Link
  4. Zuul Server : используется в качестве шлюза API и его клиента Eureka.GitHub Ссылка

Я использовал Spring Boot STS для разработки сервисов.Также использовал зависимость "Spotify" для создания образов докера.

Я могу запустить все службы из STS на localhost (windows), и все работает нормально.Все три упомянутые службы регистрируются на сервере Eureka.

Но все перестало работать, когда я выбрал докеризацию сервисов.Я создал четыре изображения докеров четырех сервисов.

Проблема: Запустил сервер Eureka и «Службу регистрации пользователей» в двух отдельных контейнерах, но служба не регистрируется в Eureka.На самом деле ни одна из служб не регистрируется в Eureka.

Что я сделал:

Попробуйте 1:

Ran the Eureka server and client using below commands:

dockerзапустите --rm -it - имя eurekaserver-container -p 8761: 8761 eurekaserver-alpine-linux

docker run --rm -it -d - имя пользователя-регистрации-контейнера -p 8081: 8081регистрация пользователя

enter image description here

Похоже, Eureka Client (служба регистрации пользователей) не может найти сервер Eureka.Я обнаружил, что сервер Eureka работает в контейнере с другим IP-адресом (172.0 ...), а клиент Eureka не может подключиться к серверу.

Попробуйте 2:

Запустил сервер Eurekaи клиент, используя следующие команды.Попытка связать два контейнера (Eureka Server и Client):

docker run --rm -it --name eurekaserver-container -p 8761: 8761 eurekaserver-alpine-linux

docker run --rm -it -d --name user-registration-container -p 8081: 8081 --link eurekaserver-container: eureka-server user-registration

Это тоже не удалосьработа.

Попробуйте 2 Ошибка

Попробуйте 3:

Запустите сервер и клиент Eureka с помощью приведенных ниже команд.Попытка передать имя хоста в образ Eureka, чтобы Клиент мог найти сервер Eureka, используя имя хоста.Также связаны два контейнера.

запуск докера --rm -it -d - имя eurekaserver-container -h discovery-eurekaserver.com -p 8761: 8761 eurekaserver-alpine-linux / bin /bash

docker run --rm -it -d - имя пользователя-регистрации-контейнера -p 8081: 8081 - ссылка eurekaserver-контейнер: регистрация пользователя eureka-сервера

Попытка 3 Ошибка

Это тоже не сработало.

Может кто-нибудь помочь мне понять, что я делаю неправильно? Что бы я ни делалклиенты Eureka не могут зарегистрироваться на сервере Eureka при работе в разных контейнерах.

Моя цель - запустить службы (сервер Eureka, службы приложений и т. д.) в разных контейнерах, и все службы будут регистрироваться.с сервером Eureka, чтобы я мог вызывать API из Postman или SOAP UI.

1 Ответ

0 голосов
/ 03 марта 2019

Я полагаю, у вас есть отдельный Dockerfile для каждого загрузочного проекта Spring.

FROM maven:3.6.0-jdk-8
MAINTAINER xxx@yyyyy.com
COPY . /usr/src/project-name
WORKDIR /usr/src/project-name
CMD ["mvn","spring-boot:run"]

И docker-compose.yml для управления службами, сетями и связями между контейнерами.

Дляпример:

version: '3.5'
services:

  discovery-server:
    build:
      context: ./discovery-server
    hostname: discovery-server
    environment:
      - SPRING_APPLICATION_NAME=discovery-server
      - SPRING_PROFILES_ACTIVE=dev
    command: ["mvn", "spring-boot:run"]
    expose:
      - "8761"
    volumes:
      - maven-home:/root/.m2
    networks:
      services-network-01:
        aliases:
          - discovery-server

  user-service:
    build:
      context: ./user-service
    hostname: user-service
    environment:
      - SPRING_APPLICATION_NAME=user-service
      - SPRING_PROFILES_ACTIVE=dev
    command: ["mvn", "spring-boot:run"]
    ports:
      - "8080:8080"
    volumes:
      - maven-home:/root/.m2
    networks:
      services-network-01:
        aliases:
          - user-service
    depends_on:
      - discovery-server

volumes:
  maven-home:

networks:
  services-network-01:
    name: services-network-01
    driver: bridge

Ссылка на файл составления Docker

И в конечном итоге зависит от конфигурации сервера обнаружения Eureka и микросервисов.

Конфигурация сервера обнаружения Eurekaв application.yml:

server:
  port: 8761
eureka:
  client:
    register-with-eureka: false
    fetch-registry: false
    region: region1
    serviceUrl:
      zone1: http://discovery-server:8761/eureka/
    availability-zones:
      region1: zone1
  instance:
    hostname: discovery-server
    metadata-map:
      zone: zone1

Конфигурация клиента Eureka в application.yml в Микросервисах:

# Eureka client
eureka:
  instance:
    prefer-ip-address: true
    metadata-map:
      zone: zone1
  client:
    prefer-same-zone-eureka: true
    register-with-eureka: true
    region: region1
    service-url:
      zone1: http://discovery-server:8761/eureka/
    availability-zones:
      region1: zone1

Запустить docker compose:

docker-compose up -d --build --force-recreate

DockerСоставить команды Refrence

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...