将eureka集群部署到docker中遇到的坑

在IntelliJ IDEA开发环境下运行良好的eureka集群,部署docker会遇到的坑。

一、vmware的unbuntu20虚拟机镜像互相ping通的问题

1、首先,要将各虚拟机镜像的网络适配器配置为NAT方式,都选定在同一个NAT网络下。

这样做,才能保证各虚拟机之间,物理网络是互通的,这时候你用ping xxx.xxx.xxx.xxx才可以互通

2、然后,进入各ubuntu之中,修改/ect/hosts和/ect/hostname,将各虚拟机之间的主机名称和IP映射关系填上。

这样做,才能保证各虚拟机之间,ping 主机名的方式,才可以互通,典型的hosts内容如下

127.0.0.1 localhost
127.0.0.1 hostname
127.0.1.1 server-3

192.168.88.129 server-1
192.168.88.130 server-2
192.168.88.131 server-3

# The following lines are desirable for IPv6 capable hosts
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

配置完成后,eureka.jar就可以直接在ubuntu环境下运行了

二、docker的hosts映射

如果将eureka.jar打包到docker镜像后,会发现各虚拟机的eureka之间无法互通的问题,原因是eureka在各docker里的hosts为缺省配置问题。

1、在docker的镜像生成后,docker镜像里的/ect/hosts默认是空的简化配置,进入docker里后可以通过ping主机名称确认,或者直接看/ect/hosts可以发现未配置的问题。

解决办法是在docker的启动命令中,带入端口映射,典型docker启动命令如下

docker run --add-host server-1:192.168.88.129 --add-host server-2:192.168.88.130 --add-host server-3:192.168.88.131 --add-host hostname:127.0.0.1 --add-host server-3:127.0.1.1 -d -p 9000:9000 micro-eureka-server

把需要添加的hosts按参数 --add-host 主机名:IP地址 的格式逐个添加。

然后,启动各docker后,可以发现euraka集群的各euraka实例就互相连接上了。

-------------------------

今天又发现一个隐秘的坑:虚拟机挂起/并恢复后,上面各虚拟机之间的docker容器又互相ping不通了。进去docker容器中ping其他虚拟机的IP ping不通了,而在容器之外的虚拟机中却是可以ping通的!!!!

明显是docker里的虚拟网卡----虚拟机的docker网关虚拟网卡----虚拟机的虚拟网卡三者之间的router出了问题。懒的去进一步分析问题了,将docker默认的桥接模式改成host模式,直接解决。

docker run -d --net=host micro-eureka-server \
  --server.port=9000 --eureka.server.group=server

参考文章:

用docker 部署springCloud 微服务不能识别注册中心eureka的问题 - 中国扛把子的个人空间 - OSCHINA - 中文开源技术交流社区

Docker修改hosts方法 - AmyZYX - 博客园

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值