【问题标题】:Docker Communication between service of one stack to another一个堆栈的服务与另一个堆栈之间的 Docker 通信
【发布时间】:2018-05-17 16:21:35
【问题描述】:

我正在尝试一个使用不同 docker 堆栈的简单服务发现方案。
假设我有 2 个堆栈。为简单起见,我将它们命名为 stackA 和 stackB。 StackA 有一个名为“serviceA”的服务,而 StackB 有一个名为“serviceB”的服务。 ServiceA 和 serviceB 有一个简单的 RestApplication。

现在我想从 serviceA 调用 serviceB。了解docker服务发现的概念,按照docker官方文档,无法调用serviceB。 discovering-services-or-containers-on-another-stack

根据官方文档,我正在使用 serviceB.StackB ,但做不到。

无法理解原因。几点:
1.每个堆栈创建自己的网络。是否因为两个堆栈不在同一个网络中而发生?
2. 如果我只需要在不同的网络中,我如何调用不同的服务

【问题讨论】:

  • 你在使用 docker cloud 吗?还是在您的服务器上运行?
  • 您用“resttemplate”标记了您的问题,所以我假设您使用的是 Spring Boot?如果是这样,请查看“Eureka”,这是使用 Spring 发现微服务的最佳实践。这些微服务可以放入自己的 docker 容器中,并自动相互通信。
  • @leodotcloud 我没有使用 docker 云。它有 3 个节点、1 个管理器和 2 个工人
  • @BennettDams 是的,我正在使用 Spring-Boot。但是,我没有使用 Netflix OSS。如果我使用 netflix,我会选择 feign client。
  • @VivekShukla 根据您提供的文档链接,我认为 service.stack 解析可能是 Docker 云的一个功能,而不是用于自定义设置?不过我自己没试过。

标签: docker resttemplate service-discovery docker-stack


【解决方案1】:

我已经找到了解决上述问题的方法。
您需要执行 2 个步骤:

  1. 要相互通信的服务应该属于同一个网络
version: "3"
  services:
    serviceA:
    ....
    networks:
    - YOUR_NETWORK
networks:
  YOUR_NETWORK:
    external: true

2. 如果您部署您的堆栈,您的服务始终以堆栈名称为前缀,例如**STACK-NAME_SERVICE-NAME**。
要发现另一个服务,只需使用 STACK-NAME_SERVICE-NAME:PORT

【讨论】:

    猜你喜欢
    • 2013-12-26
    • 1970-01-01
    • 2012-02-15
    • 2019-08-08
    • 1970-01-01
    • 2022-10-17
    • 1970-01-01
    • 2019-10-08
    • 2015-01-14
    相关资源
    最近更新 更多