我是Spring Boot和Docker的新手。
编写了以下微服务。
我已经使用“Spring Boot STS”来开发服务。还使用“Spotify”依赖项来构建docker镜像。
我能够在本地主机(Windows)上从STS运行所有服务,并且一切正常。前面提到的所有三个服务都已在Eureka服务器中注册。
但是当我选择对服务进行docker化时,一切都停止了工作。我已经创建了四个服务的四个docker镜像。
问题:在两个单独的容器中运行Eureka服务器和“用户注册服务”,但该服务未在Eureka中注册。实际上,这些服务都没有在Eureka上注册。
我做了什么:
尝试1:
Ran the Eureka server and client using below commands:
看来Eureka Client(用户注册服务)无法找到Eureka服务器。我发现,Eureka服务器正在具有不同IP(172.0 ...)的容器中运行,而Eureka客户端无法连接该服务器。
尝试2:
使用以下命令运行Eureka服务器和客户端。试图链接两个容器(Eureka Server和Client):
这也不起作用。
Try 2 Error
尝试3:
使用以下命令运行Eureka服务器和客户端。尝试将主机名传递给Eureka镜像,以便客户端可以使用主机名找到Eureka服务器。还链接了两个容器。
Try 3 Error
这也不起作用。
有人可以帮助我了解我在做什么错吗? 无论我如何尝试,在不同容器中运行时,Eureka客户端都无法向Eureka服务器注册。
我的目标是在不同的容器中运行服务(Eureka服务器,应用程序服务等),并且所有服务都将在Eureka服务器中注册,以便可以从Postman或SOAP UI调用API。
最佳答案
我建议,每个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"]
还有一个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发现服务器和微服务的配置。
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
微服务中
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
运行docker compose:
docker-compose up -d --build --force-recreate
Docker Compose Commands Refrence