【发布时间】:2019-07-24 13:26:45
【问题描述】:
我是 Spring Boot 和 Docker 的新手。 编写以下微服务。
- 用户注册服务:在 MySql 数据库中创建用户,并使用 Rest Template 及其 Eureka Client 与“搜索和删除服务”交互。 GitHublink
- 用户搜索和删除服务:从 MySql 数据库及其 Eureka 客户端中搜索和删除。 GitHubLink
- Eureka Server:用于服务发现。 GitHubLink
- Zuul Server:用作 API 网关及其 Eureka 客户端。 GitHubLink
我使用“Spring Boot STS”来开发服务。还使用“Spotify”依赖来构建 docker 镜像。
我能够在本地主机(windows)上运行来自 STS 的所有服务,并且一切正常。前面提到的所有三个服务都在 Eureka 服务器中注册。
但是当我选择 dockerize 服务时,一切都停止了。我创建了四个服务的四个 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 用户注册
Eureka 客户端(用户注册服务)似乎无法找到 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 用户注册
这也没有用。
尝试 3:
使用以下命令运行 Eureka 服务器和客户端。尝试将主机名传递给 Eureka 镜像,以便 Client 可以使用主机名找到 Eureka 服务器。还链接了两个容器。
docker run --rm -it -d --name eurekaserver-container -h 发现-eurekaserver.com -p 8761:8761 eurekaserver-alpine-linux /bin/bash
docker run --rm -it -d --name 用户注册容器 -p 8081:8081 --link eurekaserver-container:eureka-server 用户注册
这也没有用。
谁能帮我理解我做错了什么?无论我尝试了什么,当在不同的容器中运行时,Eureka 客户端都无法注册到 Eureka 服务器。
我的目标是在不同的容器中运行服务(Eureka Server、Application Services 等),所有服务都将注册到 Eureka Server,以便我可以从 Postman 或 SOAP UI 调用 API。
【问题讨论】:
-
try 2 和 try 3 的错误响应是什么?
-
和Try 1一样
-
如果这是客户端的错误日志,那么 Eureka Server 或客户端尝试访问的任何内容都应该绑定到
0.0.0.0,以便其他容器可以访问它。正如日志所说,连接被拒绝,这意味着客户端无法访问服务器,因为该端口上没有通过容器 ip 侦听的服务。检查服务本身的配置文件以便配置它 -
运行 Eureka Server 容器后,我运行了以下命令。 Rocks@Rocks-Lapi MINGW64 /c/Program Files/Docker Toolbox $ docker inspect -f '{{.Name}} - {{.NetworkSettings.IPAddress }}' $(docker ps - aq) /eurekaserver-container - 172.17。 0.2
-
运行 Eureka Server 容器后,我运行了以下命令。 Rocks@Rocks-Lapi MINGW64 /c/Program Files/Docker Toolbox $ docker inspect -f '{{.Name}} - {{.NetworkSettings.IPAddress }}' $(docker ps - aq) /eurekaserver-container - 172.17.0.2 。因此,这意味着 Eureka 在 172.17.0.2 IP 上运行,这只是一个容器 IP。但是在 Eureka 服务器属性文件中,我写了 "eureka.instance.hostname=discovery-eurekaserver.com" 。在 windows hosts 文件中,discovery-eurekaserver.com 是 127.0.0.1。在运行容器之前,如何在属性文件中提及 ip?
标签: spring-boot docker containers microservices