简体   繁体   English

如何在单独的Docker容器中配置和运行Eureka Server,微服务(Eureka Client),Zuul?

[英]How to configure and run Eureka Server, Microservices (Eureka Client), Zuul inside separate docker containers?

I am a newbie in Spring Boot and Docker. 我是Spring Boot和Docker的新手。 Written the below microservices. 编写了以下微服务。

  1. User Registration Service : Create users in the MySql database and also interacts with "Search and Delete Service" using Rest Template and its Eureka Client. 用户注册服务 :在MySql数据库中创建用户,并使用Rest Template及其Eureka Client与“搜索和删除服务”交互。 GitHub link GitHub 链接
  2. User Search and Delete Service : Search and Delete from MySql database and its Eureka Client. 用户搜索和删除服务 :从MySql数据库及其Eureka Client中搜索和删除。 GitHub Link GitHub 链接
  3. Eureka Server : Used for service discovery. Eureka Server :用于服务发现。 GitHub Link GitHub 链接
  4. Zuul Server : Used as an API Gateway and its Eureka Client. Zuul服务器 :用作API网关及其Eureka客户端。 GitHub Link GitHub 链接

I have used "Spring Boot STS" to develop the services. 我已经使用“ Spring Boot STS”来开发服务。 Also used "Spotify" dependency to build the docker images. 还使用“ Spotify”依赖项来构建docker映像。

I am able to run all the services from STS on localhost (windows) and everything is working fine. 我能够在本地主机(Windows)上从STS运行所有服务,并且一切正常。 All the three services mentioned before are getting registered in Eureka server. 前面提到的所有三个服务都已在Eureka服务器中注册。

But everything stopped working when I choose to dockerize the services. 但是,当我选择对服务进行docker化时,一切都停止了工作。 I have created four docker images of the four services. 我已经创建了四个服务的四个docker映像。

Problem: Ran the Eureka server and "User Registration Service" in two sperate containers but the service is not getting registered with Eureka. 问题:在两个单独的容器中运行Eureka服务器和“用户注册服务”,但该服务未在Eureka中注册。 In fact none of the services is getting registered with Eureka. 实际上,这些服务都没有在Eureka上注册。

What I did: 我做了什么:

Try 1: 尝试1:

Ran the Eureka server and client using below commands:

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

docker run --rm -it -d --name user-registration-container -p 8081:8081 user-registration docker运行--rm -it -d --name用户注册容器-p 8081:8081用户注册

在此处输入图片说明

It seems Eureka Client (User Registration Service) is not able to find Eureka server. 看来Eureka Client(用户注册服务)无法找到Eureka服务器。 What I found, Eureka server is running within a container with different IP (172.0...) and Eureka client is not able to connect the server. 我发现,Eureka服务器正在具有不同IP(172.0 ...)的容器中运行,而Eureka客户端无法连接该服务器。

Try 2: 尝试2:

Ran the Eureka server and client using below commands. 使用以下命令运行Eureka服务器和客户端。 Tried to link the two containers (Eureka Server and Client): 试图链接两个容器(Eureka Server和Client):

docker run --rm -it --name eurekaserver-container -p 8761:8761 eurekaserver-alpine-linux docker运行--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 docker run --rm -it -d --name用户注册容器-p 8081:8081 --link eurekaserver容器:eureka服务器用户注册

This also didn't work. 这也没有用。

Try 2 Error 尝试2错误

Try 3: 尝试3:

Ran the Eureka server and client using below commands. 使用以下命令运行Eureka服务器和客户端。 Tried to pass the host name to Eureka image, so that Client can find the Eureka server using host name. 尝试将主机名传递给Eureka映像,以便客户端可以使用主机名找到Eureka服务器。 Also linked the two containers. 还链接了两个容器。

docker run --rm -it -d --name eurekaserver-container -h discovery-eurekaserver.com -p 8761:8761 eurekaserver-alpine-linux /bin/bash docker运行--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 docker run --rm -it -d --name用户注册容器-p 8081:8081 --link eurekaserver容器:eureka服务器用户注册

Try 3 Error 尝试3错误

This also didn't work. 这也没有用。

Can anyone please help me to understand what am I doing wrong? 谁能帮我了解我在做什么错? Whatever I have tried, Eureka clients are not able to register with Eureka server when running in different containers. 无论我尝试了什么,当在不同容器中运行时,Eureka客户端都无法向Eureka服务器注册。

My objective is to run the services (Eureka Server, Application Services etc.) in different containers and all the services will register with Eureka server, so that I can call APIs from Postman or SOAP UI. 我的目标是在不同的容器中运行服务(Eureka服务器,应用程序服务等),并且所有服务都将在Eureka服务器中注册,以便可以从Postman或SOAP UI调用API。

I suggest, you have a separate Dockerfile for each Spring boot project. 我建议,每个Spring引导项目都有一个单独的Dockerfile。

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"]

And a docker-compose.yml for controlling services and networks and links between containers. 还有一个docker-compose.yml用于控制服务和网络以及容器之间的链接。

For example: 例如:

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 Docker撰写文件参考

And ultimately depends on the configuration for Eureka discovery server and Microservices. 最终取决于Eureka发现服务器和微服务的配置。

Eureka Discovery Server config in application.yml : application.yml Eureka Discovery Server配置:

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 client config in application.yml in Microservices: Microservices中application.yml中的Eureka客户端配置:

# 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

Run docker compose: 运行docker compose:

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

Docker Compose Commands Refrence Docker Compose命令参考

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 如何在Zuul服务器中调用其他eureka客户端 - How to call other eureka client in a Zuul server docker 中的 Eureka 客户端未与 Eureka 服务器连接 - Eureka client in docker not connecting with Eureka server 运行Zuul Server时禁用Eureka Client - Disabling Eureka Client when running Zuul Server 运行 eureka server 和 eureka client 连接多个微服务后出错 - error after running eureka server and eureka client for connecting multiple microservices 如何使用Eureka Server延迟Eureka客户注册? - How to delay Eureka client registration with Eureka Server? 如何使用认证服务器(OAuth2,0和JWT),Zuul和Eureka服务实现微服务? - How to implement Microservices with Authentication Server(OAuth2,0 and JWT), Zuul and Eureka services? Eureka、Zuul、微服务和 Spring 安全问题 - Eureka,Zuul,Microservices and Spring Security concern 使用 spring 引导在 Docker 中运行 Eureka Server 和 Eureka Client - Running Eureka Server and Eureka Client in Docker using spring boot java.net.UnknownHostException - Zuul和Eureka在Docker中无法正常工作 - java.net.UnknownHostException - Zuul and Eureka not working inside Docker 使用 docker 时,如何在 Eureka 客户端中保持 Eureka 服务器 url 动态? - How do I keep the Eureka server url dynamic in the Eureka Client while using docker?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM