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

将eureka集群部署到docker中遇到的坑,第1张

将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 - 博客园

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5426753.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-11
下一篇 2022-12-11

发表评论

登录后才能评论

评论列表(0条)

保存