多个微服务部署到 Docker 下之后,往往会出现一个问题,那就是原本能够正常被服务提供者注册的 Eureka 突然没办法接受到它们的注册信息。
前言
一般而言,我们的微服务集群中必不可少的一个模块就是服务注册中心 Eureka。
我们对它地址的配置一般都是:
eureka.client.serviceUrl.defaultZone=http://localhost:1234/eureka/
在 IDEA 或者主机上编译部署后项目也能够正常运行,可是一旦放入 Docker 中,很奇怪的事情就发生了:其他的服务没办法注册到 Eureka 上。
好了不说其他的了,先上项目源代码:simple-docker-demo
打开这个项目,看 Readme 找到最后一栏的“use Docker Compose for multy project”,然后按照步骤执行即可。
解决办法
其实问题产生的原因很简单,因为 bridge 是 Docker 默认的网络模式,换句话说,我一个 host 上的各个 container 从 docker 获取的 IP 都是不一样的(在主机编译部署后大家都是 localhost,但是在 docker 里面情况就不一样了)。
所以再使用 http://localhost:1234/eureka/这个值肯定是找不到 Eureka 的地址。
怎么办呢,可以利用 docker 的主机名来解决。
我们只需要为 Eureka 所在的 container 配置一个主机名即可,比如我们配置为 eureka-server
那么再将其他的微服务的配置进行如下修改:
eureka.client.serviceUrl.defaultZone=http://eureka-server:1234/eureka/
就可以解决问题。
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于