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

Docker Swarm如何通过DNS获取服务的所有容器IP?

如何获取Docker Swarm服务的所有容器IP地址

嗨,这个问题我之前折腾过好一会儿!Docker默认的内置DNS为了实现客户端侧的负载均衡,每次查询服务名只会返回单个IP,但要拿到某个服务所有副本的IP,还是有几个实用的办法的:

方案1:查询Docker SRV记录

Docker Swarm的服务发现会自动生成对应的SRV记录,你可以用dig命令来查询这些记录,从而获取所有副本的IP:

docker run --rm --network micro alpine dig service-a SRV

执行后你会看到包含每个service-a副本的主机名、IP和端口的输出,从中就能提取出所有目标IP地址。

方案2:直接通过Docker命令提取IP

如果你的服务运行在Docker Swarm集群里,直接用Docker引擎的命令就能精准获取所有副本的IP,步骤如下:

  1. 先获取service-a所有任务的ID:
docker service ps -q service-a
  1. 接着把这些ID传入docker inspect命令,提取对应容器在micro网络中的IP:
docker service ps -q service-a | xargs docker inspect --format '{{.NetworkSettings.Networks.micro.IPAddress}}'

这个命令会直接输出service-a所有副本的IP地址列表,非常直观。

补充说明:为什么nslookup只返回一个IP?

Docker内置的DNS组件(比如coredns或者旧版的docker-dns)默认采用轮询策略,每次查询服务名时只会返回一个IP,这样客户端每次请求都会打到不同的副本上,实现简单的负载均衡。所以你多次执行nslookup service-a可能会得到不同的IP,但一次查询不会返回全部。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:47:56