我有一个多容器web应用程序,它是在docker-compose.yml文件中定义的。在我们的测试环境中,我希望在同一个Docker主机上运行这个堆栈的多个实例。除了一些次要的配置细节(例如,每个堆栈可能使用不同的数据库和/或容器图像标记),堆栈将是相同的。
具体来说,我希望它的工作如下:
https://awesomeco.com/dev-app/将指向dev stackhttps://awesomeco.com/test-app/将指向测试stackhttps://awesomeco.com/qa-app/将指向QA堆栈所有3个堆栈都将使用相同的docker-compose.yml文件。
我打算为每个堆栈使用唯一名称的Docker网络,以防止容器在堆栈内通信时的命名冲突。但是,我不清楚如何将Nginx反向代理放在所有堆栈的前面,以便将流量路由到正确的堆栈,因为每个堆栈具有相同的服务名称集。
例如,如果每个堆栈都有一个名为web-app的服务,并且我的nginx反向代理连接到所有堆栈网络,那么如何将流量路由到web-app服务的“右”实例?
有人知道如何才能最好地做到这一点吗?而且,如果这是不可能的,而且每个堆栈必须都有唯一的命名服务,那么堆栈容器之间的通信不会突然变得更加困难吗?例如,服务名称目前在单个服务的源代码中被硬编码,例如web-app可以通过http://database-server与数据库通信。这些名字也需要变得动态吗?
发布于 2021-02-10 11:00:21
这可以使用网络别名来实现。它们可用于通过连接到的网络中的另一个名称解析容器。
在码头组合文件中,它们将被定义为:
services:
some-service:
networks:
some-network:
aliases:
- alias1
- alias3
other-network:
aliases:
- alias2因此,在我的特定用例中,web-app服务的每个实例都需要在它与反向代理共享的网络中有一个唯一的别名。这将允许反向代理区分web-app服务的不同实例。
进一步联系:
https://stackoverflow.com/questions/66134818
复制相似问题