Suv*_*dal 0 containers docker spring-boot microservices
我是 Spring Boot 和 Docker 的新手。编写了以下微服务。
我使用“Spring Boot STS”来开发服务。还使用“Spotify”依赖项来构建 Docker 映像。
我能够在本地主机(Windows)上运行 STS 的所有服务,并且一切正常。前面提到的所有三个服务都在 Eureka 服务器中注册。
但当我选择对服务进行 Docker 化时,一切都停止了。我创建了四个服务的四个 docker 镜像。
问题:在两个单独的容器中运行 Eureka 服务器和“用户注册服务”,但该服务未在 Eureka 中注册。事实上,所有服务都没有在 Eureka 注册。
我做了什么:
Ran the Eureka server and client using below commands:
Run Code Online (Sandbox Code Playgroud)
docker run --rm -it --name eurekaserver-container -p 8761:8761 eurekaserver-alpine-linux
docker run --rm -it -d --name 用户注册容器 -p 8081:8081 用户注册
看来 Eureka 客户端(用户注册服务)无法找到 Eureka 服务器。我发现,Eureka 服务器在具有不同 IP(172.0...)的容器中运行,并且 Eureka 客户端无法连接服务器。
使用以下命令运行 Eureka 服务器和客户端。尝试链接两个容器(尤里卡服务器和客户端):
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 用户注册
这也行不通。
使用以下命令运行 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 用户注册
这也行不通。
谁能帮助我理解我做错了什么?无论我尝试过什么,Eureka 客户端在不同容器中运行时都无法向 Eureka 服务器注册。
我的目标是在不同的容器中运行服务(Eureka 服务器、应用程序服务等),并且所有服务都将注册到 Eureka 服务器,以便我可以从 Postman 或 SOAP UI 调用 API。
我建议,每个 Spring boot 项目都有一个单独的 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"]
Run Code Online (Sandbox Code Playgroud)
以及用于控制服务和网络以及容器之间的链接的 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
Run Code Online (Sandbox Code Playgroud)
最终取决于 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
Run Code Online (Sandbox Code Playgroud)
微服务中的 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
Run Code Online (Sandbox Code Playgroud)
运行 docker compose:
docker-compose up -d --build --force-recreate
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4258 次 |
| 最近记录: |