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

如何通过Docker API获取Docker Stack列表?已查阅相关文档未找到对应方法

通过Docker API获取Docker Stack列表的方法

嘿,我来帮你搞定这个问题!你找不到直接的Docker Stack列表API很正常——因为Stack本质是Docker CLI层面的抽象,底层其实是带特定标签的Swarm服务集合,官方API并没有单独提供Stack列表的端点,但我们可以通过筛选服务标签来实现。

一、使用原生Docker Engine REST API

每个通过docker stack deploy部署的服务,都会自动带上com.docker.stack.namespace标签,标签值就是Stack的名称。我们可以利用这个特性,调用/services接口并添加过滤条件来获取相关服务,再提取去重得到Stack列表。

1. 基础请求(获取带Stack标签的服务)

你可以用curl发送请求(这里假设Docker API监听在本地2375端口,或者用unix套接字unix:///var/run/docker.sock):

curl -X GET "http://localhost:2375/services?filters={%22label%22:{%22com.docker.stack.namespace%22:true}}"

2. 直接提取Stack名称(用jq处理结果)

如果想直接得到去重后的Stack列表,可以用jq工具解析返回的JSON:

curl -s "http://localhost:2375/services?filters={%22label%22:{%22com.docker.stack.namespace%22:true}}" | jq -r '.[].Spec.Labels."com.docker.stack.namespace"' | sort | uniq

二、使用docker-py(Python SDK)

针对你提到的docker-py,同样可以通过筛选服务标签来实现。下面是具体的代码示例:

import docker

# 初始化Docker客户端(根据你的API地址调整,本地默认用unix套接字)
client = docker.DockerClient(base_url='unix://var/run/docker.sock')

# 获取所有带有com.docker.stack.namespace标签的Swarm服务
stack_services = client.services.list(filters={'label': 'com.docker.stack.namespace'})

# 提取并去重Stack名称(用集合自动去重)
stack_names = list({service.attrs['Spec']['Labels']['com.docker.stack.namespace'] for service in stack_services})

# 打印结果
print("已部署的Docker Stack列表:", stack_names)

简单解释一下:Stack的核心是一组关联的Swarm服务,每个服务都会携带Stack的命名空间标签,所以只要筛选出带这个标签的服务,提取标签值并去重,就能得到所有的Stack列表了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 04:27:36