我有一个eureka服务器。
server:
port: 8761
eureka:
client:
registerWithEureka: false
fetchRegistry: false
我有一个尤里卡客户端。
spring:
application:
name: mysearch
server:
port: 8020
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka
instance:
preferIpAddress: true
我的尤里卡客户端正在Docker容器中运行。
FROM java:8
COPY ./mysearch.jar /var/tmp/app.jar
EXPOSE 8180
CMD ["java","-jar","/var/tmp/app.jar"]
我正在通过java -jar eureka-server.jar
启动Eureka服务器之后,我正在使用Eureka客户端的Docker实例 sudo docker build -t web .
和sudo docker run -p 8180:8020 -it web
。我可以从浏览器访问尤里卡客户端和服务器,但客户端没有与尤里卡服务器连接。我无法在Eureka服务器仪表板中看到客户端。我要低于错误和警告。
WARN 1 --- [tbeatExecutor-0] c.n.d.s.t.d.RetryableEurekaHttpClient : Request execution failed with message: java.net.ConnectException: Connection refused (Connection refused)
ERROR 1 --- [tbeatExecutor-0] com.netflix.discovery.DiscoveryClient : DiscoveryClient_FLIGHTSEARCH/98b0d95fd668:flightsearch:8020 - was unable to send heartbeat!
INFO 1 --- [nfoReplicator-0] com.netflix.discovery.DiscoveryClient : DiscoveryClient_FLIGHTSEARCH/98b0d95fd668:flightsearch:8020: registering service...
ERROR 1 --- [nfoReplicator-0] c.n.d.s.t.d.RedirectingEurekaHttpClient : Request execution error
WARN 1 --- [nfoReplicator-0] c.n.d.s.t.d.RetryableEurekaHttpClient : Request execution failed with message: java.net.ConnectException: Connection refused (Connection refused)
WARN 1 --- [nfoReplicator-0] com.netflix.discovery.DiscoveryClient : DiscoveryClient_FLIGHTSEARCH/98b0d95fd668:flightsearch:8020 - registration failed Cannot execute request on any known server
WARN 1 --- [nfoReplicator-0] c.n.discovery.InstanceInfoReplicator : There was a problem with the instance info replicator
我在AWS EC2 Ubuntu实例中进行此操作。谁能告诉我我在这里做错了什么?
server:
ports:
- "8761:8761"
eureka:
client:
registerWithEureka: false
fetchRegistry: false
随着上述更改,端口8761将在主机上公开并可以连接到服务器。当您使用Localhost" http://localhost:8761/eureka"连接时,正在搜索主机上的端口8761。
在Eureka客户端配置中使用主机IP代替本地主机,因为如果Localhost使用了LocalHost,则在容器中搜索端口8761
http://hostip:8761/eureka
确保您以群模式运行。(单节点也可以运行swarm)
$ docker swarm init
创建了一个覆盖网络,因此服务可以互相ping。
$ docker network create -d overlay mybridge
设置应用程序。
eureka.client.service-url.defaultZone=http://discovery:8761/eureka
现在创建第一个发现服务(Eureka Discover Server)
$ docker service create -d --name discovery --network mybridge
--replicas 1 -p 8761:8761 server-discovery
打开浏览器并使用端口8761
点击任何节点现在创建客户端服务:
$ docker service create -d --name goodbyeapp --network mybridge
--replicas 1 -p 2222:2222 goodbye-service
这将注册到发现服务。
在容器世界中,尤里卡服务器IP地址每次重新启动时都可以更改。因此,指定Eureka服务器URL的主机IP地址一直无法正常工作。
在docker-compose.yml中,我必须将尤里卡客户端服务链接到尤里卡服务器容器。在链接服务之前,尤里卡客户端无法连接到服务器。
最近在另一篇文章中已经回答了这一点:使用Docker-Compose