我是Spring Boot和Docker的新手。写下面的微服务。
我使用“Spring Boot STS”来开发服务。还使用“Spotify”依赖来构建docker镜像。
我能够在localhost(windows)上运行STS的所有服务,一切正常。之前提到的所有三项服务都在Eureka服务器上注册。
但是当我选择将服务停靠时,一切都停止了。我创建了四个服务的四个docker镜像。
问题:在两个特定容器中运行Eureka服务器和“用户注册服务”,但该服务未在Eureka注册。事实上,没有一项服务是在Eureka注册的。
我做了什么:
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用户注册
似乎Eureka Client(用户注册服务)无法找到Eureka服务器。我发现,Eureka服务器在具有不同IP(172.0 ...)的容器内运行,Eureka客户端无法连接服务器。
使用以下命令运行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
这也行不通。
使用以下命令运行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
这也行不通。
谁能帮助我理解我做错了什么?无论我尝试过什么,Eureka客户在不同容器中运行时都无法注册Eureka服务器。
我的目标是在不同的容器中运行服务(Eureka Server,Application Services等),并且所有服务都将向Eureka服务器注册,以便我可以从Postman或SOAP UI调用API。
我建议,每个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
最终取决于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