Docker 一个堆栈的服务与另一个堆栈的服务之间的通信

标签 docker resttemplate service-discovery docker-stack

我正在尝试使用不同的 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.如果我只在不同的网络中需要它们怎么办,如何调用不同的服务

最佳答案

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

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

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

关于Docker 一个堆栈的服务与另一个堆栈的服务之间的通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50396240/

相关文章:

mongodb - MongoDb中的偶发(身份验证?)失败和到期

java - 带参数的 REST API 查询

java - 休息模板 - 没有可用的缓冲区空间(已达到最大连接数?)

python - Python 中的服务定位协议(protocol) (SLP) 绑定(bind)

spring-boot - 在 Kubernetes 上使用 Netflix Eureka

docker - 无法从非本地服务器使用端口 3000 访问 Grafana(Docker 镜像)

Docker 镜像/容器未更新

json - 如果与 ClientHttpRequestInterceptor 一起使用,Spring Resttemplate postforobject 返回 null 作为对象响应

Docker 在 consul TCP 健康检查周期中重用端口

ruby-on-rails - 使用Docker-compose进行卷挂载的问题