虚拟机中docker承载的微服务注册到nacos无法访问问题

今天将一个项目中的部分子系统部署,部署到虚拟机的docker里运行,结果外部无法访问。查看nacos,显示服务已经成功注册。
在这里插入图片描述
后来发现,该服务的IP地址外部无法访问:
在这里插入图片描述
估计172.17.0.0是docker自身的网段,在上面跑的程序,注册到nacos,直接就用到了docker里的地址。因为对于应用程序来说,docker是容器,就是一个操作系统。解决办法是,在虚拟机的宿主机上添加对该地址的路由。我的虚拟机装在windows下,即在windows里添加路由。
在这里插入图片描述
操作步骤:

一、查看虚拟机的ip情况

运行命令:ip addr,得到
在这里插入图片描述

二、宿主机上添加路由

C:\Users\cq>route add -p 172.17.0.0/16 192.168.144.128
 操作完成!

注意地址来自于虚拟机的ip信息。172.17.0.0/16,说明该IP的子网掩码为16位,172.17.0.0是子网地址,172.17.0.255是该子网的广播地址。192.168.144.128是虚拟机对外地址。见步骤一。

如果要删掉该路由,就是

route delete 172.17.0.0

如此,搞定矣。

参考文章:
Windows访问Linux虚拟机里面的Docker容器


2023.04.23

三、一劳永逸的做法

创建docker容器的时候,指定用主机网络模式

--network=host
例如:
docker run -d --network=host --name app-demo registry.cn-hangzhou.aliyuncs.com/zhengqing/app-demo

这样注册到nacos,用的就是主机的地址,而不是docker地址。

参考文章:
运维(10) 解决Nacos服务注册使用Docker容器内网ip问题(指定注册ip或–network=host)


2023.05.10
但是方案三是有问题的,不一定能成功。因为使用host模式,意味着docker容器直接居于宿主机网络,完全暴露于宿主机,安全性和区隔性都被削弱;更重要的是,应用程序需要使用的端口有可能已经被占用,从而导致无法运行。最好的办法,还是添加路由,或者需要注册到nacos的其他容器,与nacos共享网络配置,即–net=container:nacos;如果nacos不在同一台机器,可以看看overlay模式。详见拙作:
采用docker部署时kafka共享zookeeper的网络配置

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值