gpt4 book ai didi

使用覆盖网络部署 Docker 堆栈 - 行为不一致

转载 作者:行者123 更新时间:2023-12-02 18:28:35 24 4
gpt4 key购买 nike

我正在使用 docker-compose.yml 文件(Swarm 堆栈部署)将 2 个容器(应用程序和 SQL)部署到同一个网络。大多数情况下,应用程序可以通过其主机名作为连接字符串中的数据源与 SQL 对话。

但是,有时它根本找不到它。为了调试它,我验证了覆盖网络确实在每个节点中创建,并且在检查每个节点上的网络时,我看到容器确实属于这个网络。

此外,当我运行 docker exec 命令进入应用程序容器时,我尝试向 SQL 容器发送 ping,主机名确实解析为正确的 IP,但仍然存在没有回复。

这非常令人沮丧,因为它只是偶尔发生。有关如何调试问题的任何建议?

version: '3.2'
services:
sqlserver:
image: xxxx:5000/sql_image
hostname: sqlserver
deploy:
endpoint_mode: dnsrr
networks:
devnetwork:
aliases:
- sqlserver

test:
image: xxxx:5000/test
deploy:
endpoint_mode: dnsrr
deploy:
restart_policy:
condition: none
resources:
reservations:
memory: 2048M
networks:
- devnetwork

networks:
devnetwork:
driver: overlay

最佳答案

负载上的服务发现和 DNS 问题是 swarm 模式下的已知包。我们经常遇到这个问题。您可以发现 Unresolved 问题 herehere .

如果您运行大量使用网络应用程序,请考虑将您的工作节点和管理节点分开。这将有助于管理者很好地执行服务发现。

您可以更改服务发现组件并将其用作Consul。或 ZooKeeper作为堆栈实现的一部分。

我会考虑使用一些服务网格来实现服务之间的数据绑定(bind)通信。 Consul可以为你做。您可以从这种设计模式中获益良多。例如安全和加密数据通信。

关于使用覆盖网络部署 Docker 堆栈 - 行为不一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54901025/

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