gpt4 book ai didi

docker - Docker Swarm 中任务的可发现性

转载 作者:行者123 更新时间:2023-12-02 18:21:05 25 4
gpt4 key购买 nike

我正在运行一个小型 Docker Swarm,运行一个具有 2 个副本的服务。在该服务中,该服务的“task-1”需要与同一服务的“task-2”对话,但我找不到实现此目的的方法

首先,我想避免将服务设置为主机网络模式,因为这样将其放入 swarm 中就没有什么意义了。

其次,我发现您可以在 docker-compose.yml 文件中设置一个包含 TaskName 的环境变量,我使用 docker stack deply .. .:

    environment:
- NODENAME={{.Node.Hostname}}
- NODEID={{.Node.ID}}
- SERVICEID={{.Service.ID}}
- SERVICENAME={{.Service.Name}}
- TASKID={{.Task.ID}}
- TASKNAME={{.Task.Name}}

您可以从各种容器中 ping $TASKNAME。但它是不可发现的,因为名称 TASKNAME=e2foobar_yada.gq7ygzvp114q2x3t99lasuowc.e6ncft2k14g9o2u4blvhns19 包含在您重新启动服务时发生变化的 ID。

我可以设置别名吗?有什么方法可以让我进行任务通信吗?

最佳答案

您可以在 tasks.$servicename 上运行 DNS 查找,其中 $servicename 是您的服务名称。它将解析为指向服务中每个任务的 ip 列表。它是为 swarm 模式实现的 DNS-RR,以支持无法通过内置基于 IP 的 RR 负载均衡器的进程。

您每次访问服务时都需要查询 DNS 列表,因为可以更换容器。存在 DNS 变得陈旧的风险,您将与一个宕机的容器或一个完全不同的容器通信(这就是为什么基于 IP 的负载平衡如此受欢迎的原因)。您还需要将自己从返回的 IP 列表中排除。

关于docker - Docker Swarm 中任务的可发现性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52904646/

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