【Docker】使用 Docker 部署的微服务在 Nacos 里注册成内网地址 导致无法微服务间互相调用的解决方案...

使用 Docker 部署的微服务在 Nacos 里注册成内网地址 导致无法微服务间互相调用的解决方案

遇到问题:

一般情况下,微服务采用docker部署,通常默认采用 bridge 桥接的网络模式,docker 会自动分配一个 172.x.x.x 这样的私有内网地址,存在这样的难题:

由于是 172开头的内部网络地址, 在本机的docker 内是可以访问,而 跨主机 就无法访问。
在使用了nacos 后,nacos 里注册的服务地址是 172 开头的,导致 微服务间调用失败。
解决方法:

  1. 采用 host 模式
    创建出来的容器没有独立ip,无法产生网络隔离的效果,它占用宿主机的IP。

注意:docker 在 linux 系统 下才支持 host 模式。mac 无法使用,我在这里坑半天。

  1. 采用 bridge模式,做端口映射
    将 容器的端口号 映射到 宿主机的端口号,在被访问时通过宿主机的IP和端口来访问。

在 使用 springcloud微服务时,单个服务在向注册中心注册的时候可以指定注册ip,这样就不会自动注册成 docker 容器的私有ip。

在 Nacos 下配置

使用的是nacos注册中心,指定 spring.cloud.nacos.discovery.ip = 宿主机的IP,这样注册到 Nacos 的微服务ip就是这里指定的宿主机IP 了,在Nacos里显示是宿主机的IP, 进行服务间访问的时候也是用这个ip,就不会出现无法访问了。

关键是:

spring.cloud.nacos.discovery.ip = 宿主机的IP

扩展知识

在使用docker run创建Docker容器时,可以用–network标志 选项指定容器的网络模式,Docker有以下4种网络模式:

host模式:使用 --net=host 指定。
bridge模式:使用 --net=bridge 指定,默认设置。
none模式:使用 --net=none 指定。
host模式
host模式类似于Vmware的桥接模式,与宿主机在同一个网络中,但没有独立IP地址。一个Docker容器一般会分配一个独立的Network Namespace。但如果启动容器的时候使用host模式,那么这个容器将不会获得一个独立的Network Namespace,而是和宿主机共用一个Network Namespace。容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,在Linux上使用docker部署nacos并指定IP地址的步骤如下: 1. 安装docker 如果您的Linux机器上还没有安装docker,您需要先安装docker。可以执行以下命令来安装: ``` curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun ``` 2. 下载nacosdocker镜像文件 运行以下命令: ``` docker pull nacos/nacos-server ``` 3. 启动nacos容器并指定IP地址 运行以下命令: ``` docker run --name nacos -e MODE=standalone -e SPRING_DATASOURCE_PLATFORM=mysql -e MYSQL_SERVICE_HOST=192.168.88.130 -p 8848:8848 -d nacos/nacos-server ``` 其中,`--name`指定容器名称,`-e MODE=standalone`指定nacos为单机模式,`-e SPRING_DATASOURCE_PLATFORM=mysql -e MYSQL_SERVICE_HOST=192.168.88.130`指定nacos使用MySQL数据库,并且MySQL数据库的IP地址为192.168.88.130,`-p 8848:8848`指定映射到主机的端口号为8848。 4. 访问nacos 在浏览器中输入以下网址进行访问:http://192.168.88.130:8848/nacos/ 现在,您已经部署nacos! 如果您无法访问nacos界面,请检查以下几点: 1. 确认nacos容器是否已经启动 您可以运行以下命令查看容器状态: ``` docker ps -a ``` 如果nacos容器的状态为`Exited`,则说明容器启动失败。您可以运行以下命令查看容器日志,以便更好地排查问题: ``` docker logs nacos ``` 2. 确认端口是否正确映射 您可以运行以下命令查看容器端口映射情况: ``` docker port nacos ``` 如果您发现端口没有正确映射到主机上,您可以停止并删除容器,然后重新启动容器并指定正确的端口映射参数。 3. 确认防火墙是否允许访问端口 如果您的Linux机器上启用了防火墙,可能会阻止对nacos端口的访问。您可以尝试关闭防火墙或者配置防火墙规则以允许对端口的访问。 希望这些建议能够帮助您解决问题。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值