You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Docker Swarm中解析服务名称?附docker-compose配置示例

在Docker Swarm中解析服务名称的方法

嘿,我来帮你理清Docker Swarm里服务名称解析的事儿,结合你给出的docker-compose.yml配置,咱们一步步说清楚:

核心原理:Swarm内置的DNS服务

Docker Swarm自带了一套内置的DNS服务,它会自动给每个服务分配一个可解析的主机名——就是你在compose里定义的服务名(比如你的frontend和backend)。只要服务在同一个Swarm网络里(比如你配置的core-infra overlay网络),容器之间就能直接用服务名互相访问,完全不用记IP地址。

结合你的配置的具体用法

看你的compose文件,frontend和backend都挂载到了core-infra这个overlay网络下,所以:

  • 如果frontend容器需要调用backend的接口,直接用http://backend就行,Swarm的DNS会自动把这个名称解析到backend服务的虚拟IP(VIP),然后自动做负载均衡,把请求分发到任意一个backend副本上
  • 反过来,backend容器要访问frontend,直接用http://frontend也能正常解析

而且不管这两个服务的副本跑在Swarm集群的哪个节点上,只要在同一个overlay网络里,这个解析逻辑都能正常工作——overlay网络本身就是为Swarm跨节点通信设计的。

进阶的解析方式

如果需要更精确的解析,还有两种方式:

  • 完整域名:服务的完整DNS格式是 <服务名>.<网络名>.swarm,比如你的backend服务完整域名是backend.core-infra.swarm。不过同网络下用短名就足够,很少需要用到完整域名
  • 访问特定副本:如果要指定访问某个具体的服务副本,可以用任务的DNS名,格式是 <任务ID>.<服务名>.<网络名>.swarm。不过这个场景比较少见,大部分时候用服务名让Swarm自动负载均衡就够了

验证解析是否正常的小技巧

你可以随便进入一个服务的容器,用nslookup或者ping测试解析:

# 先找到frontend的容器ID
docker ps | grep frontend
# 进入容器执行nslookup
docker exec -it <你的frontend容器ID> nslookup backend

执行后你会看到backend被解析到一个虚拟IP,这就说明Swarm的DNS解析正常工作了。

内容的提问来源于stack exchange,提问作者Raul Kist

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 07:40:29