【发布时间】:2020-12-26 22:22:53
【问题描述】:
我正在尝试使用 docker-compose 和 traefik 进行零停机部署,但我遇到了容器与另一个项目交叉通信的问题。
docker-compose.yml(细节省略)
services:
proxy:
networks:
- net
app:
networks:
- net
auth:
networks:
- net
networks:
net:
external:
name: traefik_webgateway # not really important here
我通过以下方式运行我的服务的两个不同实例:
docker-compose --env-file=.env --project-name=green -f docker-compose.yml up
docker-compose --env-file=.env --project-name=blue -f docker-compose.yml up
在我运行“蓝色”项目之前,我的“绿色”服务运行良好。当“蓝色”被启动时,“绿色”“代理”容器中的一些请求被路由到“蓝色”容器。在“代理”中与“身份验证”服务进行对话的示例调用:
http://auth/session
我需要“绿色”中的网络保持“绿色”,“蓝色”中的“蓝色”...否则“绿色”中的某些请求在未准备好时会变为“蓝色”它导致 API 失败。一旦所有容器准备就绪,一切正常,但这并不是零停机时间。
看起来一切都受容器名称的约束。我不想使用container_name,因为我想使用docker scale。
我的解决方法是创建docker-compose.blue.yml 和docker-compose.green.yml 并复制所有内容,但将container name 后缀为_blue 和_green。但我想知道是否有更好的解决方案。
提前致谢。
编辑:建议的解决方案回答了这个问题,但是通过将internal 网络添加到我的proxy,traefik 失去了与我的服务的通信。
【问题讨论】: