首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Docker Swarm,如何仅通过自己的“主机名”与其他服务通信?

Docker Swarm,如何仅通过自己的“主机名”与其他服务通信?
EN

Stack Overflow用户
提问于 2019-03-07 16:28:27
回答 1查看 806关注 0票数 1

我有一些使用Docker Compose和容器链接的经验。在非集群环境中,您可以很容易地使用名称从web容器连接到db_mysql容器(例如,在PHP语言中,我可以将MySQL连接配置为:

$dsn = 'mysql:host=db_mysql;

我很难理解在集群模式下Docker是如何工作的,特别是考虑到“副本”和“负载平衡”机制。

假设我有5台不同的Docker机器,每台机器都有不同的公网IP,参与一个Swarm。我还有一个跨这5台不同机器复制的web服务和db服务(每台机器一个实例)。

我的问题是:我如何让5个web容器中的任何一个与5个db_mysql容器中的任何一个通信,而不强制这些web容器知道任何Docker Machine公共IP或这些容器生活在群中的事实?

EN

回答 1

Stack Overflow用户

发布于 2019-03-07 17:17:23

您可以使用服务名称。这将在DNS中解析为VIP或服务的5个ip地址(每个副本一个)。在幕后,VIP使用IPVS循环调度到一个健康的副本,而不会受到陈旧的DNS问题的困扰。即使使用默认的VIP,您也可以使用service_name.tasks获取所有副本IP地址。

在Docker的DNS实现中,您可以解析容器名称,以及任何网络别名。网络别名包括带有DNSRR的服务名称(由不带swarm的docker-compose使用)。或者在群模式下将业务名称解析为VIP。容器的主机名不能解析,可能是因为它可以在docker引擎的控制(从而知识)之外更改。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55039198

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档