开发者社区 > 云原生 > 正文

Nacos中,微服务docker启动dubbo注册到nacos上,其他服务订阅不上,什么原因?

Nacos中,微服务docker启动dubbo注册到nacos上,实例健康实例这些都有的,其他服务订阅不上,下线上线也订阅不到服务,后面看才发现有两个服务用了同一个端口,删除nacos服务,重新restart启动生成新的端口才正常,什么原因?

展开
收起
十一0204 2023-11-21 17:39:51 103 0
2 条回答
写回答
取消 提交回答
  • 在Nacos中,如果微服务docker启动dubbo并注册到nacos上,但发现其他服务无法订阅到该服务,或者下线后再上线也无法订阅到服务,这可能是因为两个服务使用了同一个端口。当多个服务使用相同的端口时,会导致端口冲突,从而出现这样的订阅问题。为了解决这个问题,您需要确保每个服务都使用不同的端口。如果您已经删除了nacos服务并重新启动以生成新的端口,那么这应该可以解决端口冲突的问题,从而使其他服务能够正常订阅到该服务。

    2023-11-29 14:23:37
    赞同 展开评论 打赏
  • 面对过去,不要迷离;面对未来,不必彷徨;活在今天,你只要把自己完全展示给别人看。

    出现这种情况可能是因为你在启动多个 Docker 容器时,没有正确地设置每个容器的端口号。当多个容器使用相同的端口号时,就可能导致这种服务订阅异常的问题。
    Nacos 是通过 IP 地址和端口号来识别不同服务的实例的。因此,你需要确保每个服务的实例都有唯一的 IP 地址和端口号。如果你在启动多个 Docker 容器时没有指定不同的端口号,那么这些容器就可能会使用相同的端口号,从而导致 Nacos 在注册服务时出现问题。
    此外,当你删除并重新启动 Nacos 服务时,它会自动分配一个新的端口号来避免冲突。这就是为什么你在重新启动 Nacos 后能恢复正常的原因。
    为了避免再次出现这种问题,你应该在启动 Docker 容器时,指定每个容器使用的端口号。例如,你可以使用 -p 参数来指定映射到主机上的端口号,这样每个容器就可以使用不同的端口号了。例如:

    docker run -p 8080:80 my-service
    

    在这个例子中,Docker 容器会监听 80 端口,而主机则会监听 8080 端口。这样,即使多个容器都运行在同一台主机上,它们也可以使用不同的端口号,从而避免冲突。

    2023-11-21 22:47:11
    赞同 展开评论 打赏

阿里云拥有国内全面的云原生产品技术以及大规模的云原生应用实践,通过全面容器化、核心技术互联网化、应用 Serverless 化三大范式,助力制造业企业高效上云,实现系统稳定、应用敏捷智能。拥抱云原生,让创新无处不在。

相关电子书

更多
微服务治理技术白皮书 立即下载
微服务与Serverless 立即下载
EDAS4.0 助力企业一站实现微服务架构转型与 K8s 容器化升级 立即下载