微服务部署在 Docker 下无法注册到 Eureka 下的解决办法

本贴最后更新于 2661 天前,其中的信息可能已经时移俗易

多个微服务部署到 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/

就可以解决问题。

  • Docker

    Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的操作系统上。容器完全使用沙箱机制,几乎没有性能开销,可以很容易地在机器和数据中心中运行。

    497 引用 • 934 回帖
  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3201 引用 • 8216 回帖 • 4 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • Fox1110

    我们只需要为 Eureka 所在的 container 配置一个主机名即可 你说的这句话具体是指什么啊 我现在就遇到这样的问题了

    eureka: client: service-url: defaultZone: http://localhost:8761/eureka/ register-with-eureka: false server: enable-self-preservation: false instance: hostname: eureka-server ```这是我的eureka的配置 你那句话说的是这里吗?如果是的 我还是没用啊
  • someone

    你这段配置内容是eureka的吗?
    稍微不一样,主机名的配置是在docker-compose.yml中进行配置的,我写的项目中的配置如下:

    eureka: image: liumapp/docker-eureka:v1.0.0 ports: - "1234:1234" weba: image: liumapp/docker-weba:v1.0.0 links: - eureka:discovery

    通过这段配置,eureka服务注册中心的名称为discovery,那么要让client端发现eureka,比如我这里是weba,那么它的配置文件就应该这样写:

    eureka.client.serviceUrl.defaultZone=http://discovery:1234/eureka/

    不能写localhost,因为每一个微服务在docker容器内都是有自己的网段,微服务与微服务之间的通讯要使用主机名来连接

  • someone

    具体请参考项目里面的eureka、docker-weba的配置文件,跟docker-compose.yml的内容

    1 回复
  • Fox1110

    我在你的 git 项目中没看到啊有 docker-compose.yml 文件啊 能加个 QQ 么 我的是 769657957

  • someone

    有的:https://github.com/liumapp/simple-docker-demo/blob/master/docker-compose.yml
    在这里评论或者项目中提issue就好,有些问题这里解决了别人也能看到,加QQ私聊解决后对别人没有帮助 :)

  • someone

    另外,关于docker-compose的用法,我这个项目有详细的介绍:https://github.com/liumapp/docker-compose-demo

    1 回复
  • Fox1110

    好的 我先看看

  • 1NightStand via macOS

    楼主你好,我把你的配置放到了自己的项目,执行完 install-docker.sh 后,本地镜像也构建好了,但是执行 docker-compose up 命令的时候并不在本地拉取镜像,而是去 docker.io,是哪里配置有问题吗?谢谢!

  • someone

    能把docker-compose.yml的配置内容贴出来看看吗?

  • someone

    如果你编译生成的docker镜像名称是类似于这样的:liumapp/docker-gateway:v1.0.0,那肯定不对了,因为liumapp是我的docker hub账号,所以docker-compose会去docker.io找,您需要自己注册一个docker hub账号,假设您的账号名称是 aaaa, 那么生成的镜像名称就应该是类似于: aaaa/docker-gateway:v1.0.0之类的

    1 回复
  • someone

    有一句忘说了,docker hub注册完成后,需要在您的本地机器上使用 docker login命令进行登录操作

  • 1NightStand via macOS

    感谢回复,在 stackoverflow 找到解决方案,用 docker tag src dest 也可以从本地获取

请输入回帖内容 ...
liumapp
Github: https://github.com/liumapp 杭州

推荐标签 标签

  • SQLite

    SQLite 是一个进程内的库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。SQLite 是全世界使用最为广泛的数据库引擎。

    4 引用 • 7 回帖 • 3 关注
  • Angular

    AngularAngularJS 的新版本。

    26 引用 • 66 回帖 • 559 关注
  • OneNote
    1 引用 • 3 回帖 • 1 关注
  • GitLab

    GitLab 是利用 Ruby 一个开源的版本管理系统,实现一个自托管的 Git 项目仓库,可通过 Web 界面操作公开或私有项目。

    46 引用 • 72 回帖
  • 书籍

    宋真宗赵恒曾经说过:“书中自有黄金屋,书中自有颜如玉。”

    81 引用 • 409 回帖
  • 一些有用的避坑指南。

    69 引用 • 93 回帖
  • CSS

    CSS(Cascading Style Sheet)“层叠样式表”是用于控制网页样式并允许将样式信息与网页内容分离的一种标记性语言。

    198 引用 • 543 回帖 • 2 关注
  • SpaceVim

    SpaceVim 是一个社区驱动的模块化 vim/neovim 配置集合,以模块的方式组织管理插件以
    及相关配置,为不同的语言开发量身定制了相关的开发模块,该模块提供代码自动补全,
    语法检查、格式化、调试、REPL 等特性。用户仅需载入相关语言的模块即可得到一个开箱
    即用的 Vim-IDE。

    3 引用 • 31 回帖 • 110 关注
  • BAE

    百度应用引擎(Baidu App Engine)提供了 PHP、Java、Python 的执行环境,以及云存储、消息服务、云数据库等全面的云服务。它可以让开发者实现自动地部署和管理应用,并且提供动态扩容和负载均衡的运行环境,让开发者不用考虑高成本的运维工作,只需专注于业务逻辑,大大降低了开发者学习和迁移的成本。

    19 引用 • 75 回帖 • 677 关注
  • 运维

    互联网运维工作,以服务为中心,以稳定、安全、高效为三个基本点,确保公司的互联网业务能够 7×24 小时为用户提供高质量的服务。

    151 引用 • 257 回帖 • 1 关注
  • 小说

    小说是以刻画人物形象为中心,通过完整的故事情节和环境描写来反映社会生活的文学体裁。

    32 引用 • 108 回帖
  • 开源

    Open Source, Open Mind, Open Sight, Open Future!

    412 引用 • 3588 回帖
  • 浅吟主题

    Jeffrey Chen 制作的思源笔记主题,项目仓库:https://github.com/TCOTC/Whisper

    1 引用 • 28 回帖 • 3 关注
  • 服务器

    服务器,也称伺服器,是提供计算服务的设备。由于服务器需要响应服务请求,并进行处理,因此一般来说服务器应具备承担服务并且保障服务的能力。

    125 引用 • 585 回帖 • 1 关注
  • Android

    Android 是一种以 Linux 为基础的开放源码操作系统,主要使用于便携设备。2005 年由 Google 收购注资,并拉拢多家制造商组成开放手机联盟开发改良,逐渐扩展到到平板电脑及其他领域上。

    336 引用 • 324 回帖
  • 代码片段

    代码片段分为 CSS 与 JS 两种代码,添加在 [设置 - 外观 - 代码片段] 中,这些代码会在思源笔记加载时自动执行,用于改善笔记的样式或功能。

    用户在该标签下分享代码片段时需在帖子标题前添加 [css] [js] 用于区分代码片段类型。

    188 引用 • 1332 回帖
  • RESTful

    一种软件架构设计风格而不是标准,提供了一组设计原则和约束条件,主要用于客户端和服务器交互类的软件。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。

    30 引用 • 114 回帖 • 1 关注
  • PWA

    PWA(Progressive Web App)是 Google 在 2015 年提出、2016 年 6 月开始推广的项目。它结合了一系列现代 Web 技术,在网页应用中实现和原生应用相近的用户体验。

    14 引用 • 69 回帖 • 184 关注
  • Word
    13 引用 • 41 回帖 • 1 关注
  • Flutter

    Flutter 是谷歌的移动 UI 框架,可以快速在 iOS 和 Android 上构建高质量的原生用户界面。 Flutter 可以与现有的代码一起工作,它正在被越来越多的开发者和组织使用,并且 Flutter 是完全免费、开源的。

    39 引用 • 92 回帖 • 5 关注
  • 服务

    提供一个服务绝不仅仅是简单的把硬件和软件累加在一起,它包括了服务的可靠性、服务的标准化、以及对服务的监控、维护、技术支持等。

    41 引用 • 24 回帖
  • OpenCV
    15 引用 • 36 回帖 • 6 关注
  • 电影

    这是一个不能说的秘密。

    122 引用 • 608 回帖
  • NGINX

    NGINX 是一个高性能的 HTTP 和反向代理服务器,也是一个 IMAP/POP3/SMTP 代理服务器。 NGINX 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的,第一个公开版本 0.1.0 发布于 2004 年 10 月 4 日。

    315 引用 • 547 回帖 • 1 关注
  • golang

    Go 语言是 Google 推出的一种全新的编程语言,可以在不损失应用程序性能的情况下降低代码的复杂性。谷歌首席软件工程师罗布派克(Rob Pike)说:我们之所以开发 Go,是因为过去 10 多年间软件开发的难度令人沮丧。Go 是谷歌 2009 发布的第二款编程语言。

    500 引用 • 1395 回帖 • 243 关注
  • 互联网

    互联网(Internet),又称网际网络,或音译因特网、英特网。互联网始于 1969 年美国的阿帕网,是网络与网络之间所串连成的庞大网络,这些网络以一组通用的协议相连,形成逻辑上的单一巨大国际网络。

    98 引用 • 367 回帖
  • SOHO

    为成为自由职业者在家办公而努力吧!

    7 引用 • 55 回帖