gpt4 book ai didi

Docker-compose 按项目名称隔离网络

转载 作者:行者123 更新时间:2023-12-04 01:08:52 26 4
gpt4 key购买 nike

我正在尝试使用 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
在我运行“蓝色”项目之前,我的“绿色”服务工作正常。当“blue”被启动时,“green”“proxy”容器中的一些请求被路由到“blue”容器。在“代理”中进行与“身份验证”服务交谈的示例调用:
http://auth/session
我需要“绿色”网络保持“绿色”,“蓝色”保持“蓝色”......否则“绿色”中的一些请求在未准备好时会变成“蓝色”,这会导致 API失败。一旦所有容器都准备就绪,一切正常,但这不是零停机时间。
看起来一切都受容器名称的约束。我不想用 container_name因为我想使用 docker scale .
我的解决方法是创建 docker-compose.blue.ymldocker-compose.green.yml并复制所有内容,但后缀 container name_blue_green .但我想知道是否有更好的解决方案。
提前致谢。
编辑:建议的解决方案回答了这个问题,但通过添加 internal网络到我的 proxy ,traefik 失去了与我的服务的通信。

最佳答案

默认情况下,docker-compose将为您的项目设置一个单独的隔离网络。当使用自定义网络时,这些也将使用项目名称命名空间,隔离具有不同名称的项目 - 参见 docker-compose networking docs .
但是:在您的示例中,所有容器都连接到没有命名空间的外部网络,因此即使对于不同的项目也是相同的。
由于容器也共享相同的名称,因此在该网络中解析它们可能会导致绿色或蓝色版本。
有几种方法可以解决这个问题。适当的方法取决于您的特定用例。最好也是最安全的方法是将所有具有相同项目名称的容器隔离到它们自己的内部网络,并且只将用于外部连接的端口暴露到外部网络中:

services:
proxy:
networks:
- net
- internal
app:
networks:
- internal
auth:
networks:
- internal

networks:
internal:
net:
external:
name: traefik_webgateway # not really important here
在这里,所有容器仅连接到项目范围的内部网络,并且能够相互通信。只有 proxy服务也连接到外部 net网络,可以从那里连接到。
如果您确实需要将所有服务连接到同一个外部网络,您可以使用 aliases 连同 variable substitution :
services:
proxy:
networks:
net:
aliases:
- proxy_${COLOR}
app:
networks:
net:
aliases:
- app_${COLOR}
auth:
networks:
net:
aliases:
- auth_${COLOR}

networks:
net:
external:
name: traefik_webgateway # not really important here
这基本上是您的解决方法,但只有一个 docker-compose.yml你可以这样使用:
COLOR=green docker-compose --env-file=.env --project-name=green -f docker-compose.yml up
COLOR=blue docker-compose --env-file=.env --project-name=blue -f docker-compose.yml up

关于Docker-compose 按项目名称隔离网络,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65461223/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com