如何在单独的docker容器中配置和运行Eureka Server,Microservices(Eureka Client),Zuul?

问题描述 投票:0回答:1

我是Spring Boot和Docker的新手。写下面的微服务。

  1. 用户注册服务:在MySql数据库中创建用户,并使用Rest Template及其Eureka Client与“搜索和删除服务”进行交互。 GitHub link
  2. 用户搜索和删除服务:从MySql数据库及其Eureka客户端搜索和删除。 GitHub Link
  3. Eureka Server:用于服务发现。 GitHub Link
  4. Zuul服务器:用作API网关及其Eureka客户端。 GitHub Link

我使用“Spring Boot STS”来开发服务。还使用“Spotify”依赖来构建docker镜像。

我能够在localhost(windows)上运行STS的所有服务,一切正常。之前提到的所有三项服务都在Eureka服务器上注册。

但是当我选择将服务停靠时,一切都停止了。我创建了四个服务的四个docker镜像。

问题:在两个特定容器中运行Eureka服务器和“用户注册服务”,但该服务未在Eureka注册。事实上,没有一项服务是在Eureka注册的。

我做了什么:

试试1:

Ran the Eureka server and client using below commands:

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用户注册

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

这也行不通。

Try 2 Error

尝试3:

使用以下命令运行Eureka服务器和客户端。试图将主机名传递给Eureka映像,以便客户端可以使用主机名找到Eureka服务器。还连接了两个容器。

docker run --rm -it -d --name eurekaserver-container -h discovery-eurekaserver.com -p 8761:8761 eurekaserver-alpine-linux / bin / bash

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

Try 3 Error

这也行不通。

谁能帮助我理解我做错了什么?无论我尝试过什么,Eureka客户在不同容器中运行时都无法注册Eureka服务器。

我的目标是在不同的容器中运行服务(Eureka Server,Application Services等),并且所有服务都将向Eureka服务器注册,以便我可以从Postman或SOAP UI调用API。

spring-boot docker containers microservices
1个回答
0
投票

我建议,每个Spring启动项目都有一个单独的Dockerfile。

FROM maven:3.6.0-jdk-8
MAINTAINER [email protected]
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 Compose File Refrence

最终取决于Eureka发现服务器和微服务的配置。

Qazxswpoi中的Eureka Discovery Server配置:

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

运行docker compose:

# 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 up -d --build --force-recreate

© www.soinside.com 2019 - 2024. All rights reserved.