现象

在docker中启动的Spring Boot实例在Eureka上查看实例时,主机名和ip为docker的容器名称和容器环境内的ip。导致从Eureka上点击服务后,无法打开对应服务;同时导致未在docker环境内的服务也无法使用服务名的方式进行服务间调用

基本法

Spring Boot 注册在Eureka上时,默认是以主机名方式进行注册的:
查看实例列表时,可见Status列是按照"{微服务启动的服务器的hostname}:{微服务名称}:{微服务所占的端口}"来显示的;鼠标指向某一个服务,可见其跳转url是按照"http://{微服务启动的服务器的hostname}:{微服务所占的端口}/****"来组织的。

探索

搜索后先尝试了在springcloud+docker 开发 中,遇到的那些坑----之微服务器的跨服务器跨容器访问 @屹邺林梵在启动时指定了

  1. eureka.instance.ip-address=true
  2. eureka.instance.instance-id=http://192.168.31.86:${server.port}

但是在Eureka中查看发现显示的名字变了,但是跳转url中还是容器的ip。
然后发现eureka.instance.instance-id就是Status列中用来显示服务名的Patten。
然后通过查看"org.springframework.cloud.netflix.eureka.EurekaInstanceConfigBean"发现还有一个属性是hostname,后来确认eureka.instance.hostname是用来修改跳转url中的hostname

解决

  1. 由于服务注册到Eureka的端口就是服务启动的端口,则docker 运行镜像时,需要映射与容器内的应用相同的端口号
  2. 容器内的服务在启动时指定eureka.instance.instance-ideureka.instance.hostname
docker run -dit -p 应用端口:应用端口 镜像名 java -jar /jar/包/的路径/jar包文件名.jar  --server.port=应用端口 --eureka.instance.instance-id=宿主机的hostname:\${spring.application.name}:\${server.port} --eureka.instance.hostname=宿主机的hostname或ip

解决docker中启动Spring Boot微服务注册在Eureka后无法访问的问题相关推荐

  1. Docker容器及Spring Boot微服务应用

    2019独角兽企业重金招聘Python工程师标准>>> Docker容器及Spring Boot微服务应用 1 什么是Docker 1.1 Docker的出现 问题一:项目实施环境复 ...

  2. 如何优化Spring Cloud微服务注册中心架构?

    作者: 石杉的架构笔记 1.再回顾:什么是服务注册中心? 先回顾一下什么叫做服务注册中心? 顾名思义,假设你有一个分布式系统,里面包含了多个服务,部署在不同的机器上,然后这些不同机器上的服务之间要互相 ...

  3. Docker基础篇 - (六)Docker 网络Spring Boot微服务打包Docker镜像

    ⑦ Docker 网络 7.1 理解Docker0 清空下前面的docker 镜像.容器 # 删除全部容器 [root@cVzhanshi tomcat-diy]# docker rm -f $(do ...

  4. 【Spring Cloud 基础设施搭建系列】Spring Cloud Demo项目 使用Docker Compose编排Spring Cloud微服务

    文章目录 Docker Compose快速人门 入门示例 使用Docker Comose编排Spring Cloud微服务 使用Maven插件读取Dockerfile进行构建 使用Maven插件构建D ...

  5. Spring Boot 微服务编码风格指南和最佳实践

    文奇摄于世界尽头州立公园 通过多年来使用 Spring Boot 微服务,我编制了一份编码风格指南和最佳实践列表.这份清单并不全面,但我希望您能找到一两点可以借鉴的地方,无论您是新手还是经验丰富的 S ...

  6. spring boot 微服务集群 + 注册中心

    spring boot 微服务框架下载地址: https://start.spring.io/ 注册中心 Eureka Server提供服务注册服务,各个节点启动后,会在Eureka Server中进 ...

  7. Spring Boot微服务的黑匣子测试是如此简单

    当我需要进行原型设计,概念验证或在空闲时间使用一些新技术时,开始新项目对于Maven来说总是有点烦人. 不得不说,设置Maven项目并不难,您可以使用Maven原型. 但是原型通常是过时的. 谁想玩旧 ...

  8. Spring Boot微服务间文件返回实现

    Feign接口获取文件流问题_Java_wyazyf的博客-CSDN博客 https://blog.csdn.net/wyazyf/article/details/93200033 Spring Bo ...

  9. 将微服务注册到Eureka Server上

    <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://mave ...

  10. Spring Boot微服务中Chaos Monkey的应用

    点击蓝色"程序猿DD"关注我哟 有多少人从未在生产环境中遇到系统崩溃或故障?当然,你们每个人迟早都会经历它.如果我们无法避免失败,那么解决方案似乎是将我们的系统维持在永久性故障状态 ...

最新文章

  1. 现在可以插入MSN表情了
  2. Ember——在构建Ember应用程序时,我们会使用到六个主要部件:应用程序(Application)、模型(Model)、视图(View)、模板(Template)、路由(...
  3. linux内核趣味,有关Linux 50个趣味名人名言
  4. 领导逼走员工的新套路,一次就见效
  5. visio studio调试 字符串断点
  6. 接口测试——接口测试流程
  7. 21. Kotlin学习笔记 (一) 基本语法
  8. php去除img,PHP如何去除IMG标签?_后端开发
  9. C#中执行Dos命令
  10. msi笔记本u盘装linux,msi微星笔记本bios设置u盘启动教程
  11. HCL_路由器_ISIS配置
  12. python检索论文_一种基于Python的音乐检索方法的研究
  13. c语言syslog日志记录
  14. 超声波测距模块HC-SR04简介
  15. 在飞书搞了个机器人,我让ChatGPT帮忙写算法
  16. Clickhouse特性
  17. MATLAB在线测试
  18. 【非线性光纤光学】,第四章第4题,我的解答,画出KDP晶体的角度调谐曲线
  19. android动态更新数据库数据,Android数据库更新——上万条数据的插入
  20. Dr.Elephant开发者指南

热门文章

  1. 阿泰,水晶报表--掌控对象
  2. 基于Unity3D的黄金矿工
  3. Python (and、or、、 |) 用法
  4. java 正则校验经纬度格式
  5. pixel 刷入自己编译的Android 8.0 安装Xposed 显示 Verified Boot (dm-verity) prevents the device from booting
  6. 【Django】第一课 基于Django图书借阅管理网站平台
  7. Drawable的setBounds方法
  8. 提取Excel中的超链接
  9. 夜神模拟器-软件apk存放目录
  10. 在IntelliJ下如何做parameterize method的重构