首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将侦听同一端口的多个堆栈实例部署到Docker (反向代理后面)?

如何将侦听同一端口的多个堆栈实例部署到Docker (反向代理后面)?
EN

Stack Overflow用户
提问于 2021-02-10 10:10:38
回答 1查看 642关注 0票数 2

我有一个多容器web应用程序,它是在docker-compose.yml文件中定义的。在我们的测试环境中,我希望在同一个Docker主机上运行这个堆栈的多个实例。除了一些次要的配置细节(例如,每个堆栈可能使用不同的数据库和/或容器图像标记),堆栈将是相同的。

具体来说,我希望它的工作如下:

  • https://awesomeco.com/dev-app/将指向dev stack
  • https://awesomeco.com/test-app/将指向测试stack
  • https://awesomeco.com/qa-app/将指向QA堆栈

所有3个堆栈都将使用相同的docker-compose.yml文件。

我打算为每个堆栈使用唯一名称的Docker网络,以防止容器在堆栈内通信时的命名冲突。但是,我不清楚如何将Nginx反向代理放在所有堆栈的前面,以便将流量路由到正确的堆栈,因为每个堆栈具有相同的服务名称集。

例如,如果每个堆栈都有一个名为web-app的服务,并且我的nginx反向代理连接到所有堆栈网络,那么如何将流量路由到web-app服务的“右”实例?

有人知道如何才能最好地做到这一点吗?而且,如果这是不可能的,而且每个堆栈必须都有唯一的命名服务,那么堆栈容器之间的通信不会突然变得更加困难吗?例如,服务名称目前在单个服务的源代码中被硬编码,例如web-app可以通过http://database-server与数据库通信。这些名字也需要变得动态吗?

EN

回答 1

Stack Overflow用户

发布于 2021-02-10 11:00:21

这可以使用网络别名来实现。它们可用于通过连接到的网络中的另一个名称解析容器。

在码头组合文件中,它们将被定义为:

代码语言:javascript
复制
services:
  some-service:
    networks:
      some-network:
        aliases:
          - alias1
          - alias3
      other-network:
        aliases:
          - alias2

因此,在我的特定用例中,web-app服务的每个实例都需要在它与反向代理共享的网络中有一个唯一的别名。这将允许反向代理区分web-app服务的不同实例。

进一步联系:

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66134818

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档