1、docker stack ps 简介
docker stack ls
命令是用于列出指定堆栈中的任务(tasks)。它显示了每个任务的详细信息,包括任务ID、名称、状态、副本数等。
此命令与Swarm orchestrator一起工作。
注意:
此命令是一个集群管理命令,必须在集群管理器节点上执行。要了解managers和workers,请参阅文档中的Swarm mode部分。
参考文档:https://docs.docker.com/engine/reference/commandline/stack_ps/
2、docker stack ps 语法
docker stack ps [OPTIONS] STACK
3、docker stack ps 命令
1)列出属于堆栈的任务
以下命令显示属于 voting 堆栈的所有任务:
docker stack ps voting ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS xim5bcqtgk1b voting_worker.1 dockersamples/examplevotingapp_worker:latest node2 Running Running 2 minutes ago q7yik0ks1in6 voting_result.1 dockersamples/examplevotingapp_result:before node1 Running Running 2 minutes ago rx5yo0866nfx voting_vote.1 dockersamples/examplevotingapp_vote:before node3 Running Running 2 minutes ago tz6j82jnwrx7 voting_db.1 postgres:9.4 node1 Running Running 2 minutes ago w48spazhbmxc voting_redis.1 redis:alpine node2 Running Running 3 minutes ago 6jj1m02freg1 voting_visualizer.1 dockersamples/visualizer:stable node1 Running Running 2 minutes ago kqgdmededccb voting_vote.2 dockersamples/examplevotingapp_vote:before node2 Running Running 2 minutes ago t72q3z038jeh voting_redis.2 redis:alpine node3 Running Running 3 minutes ago代码docker stack ps voting
2)过滤器(--filter)
过滤器标志(-f 或 --filter)的格式是键值对。如果有多个过滤器,则可以传递多个标志(例如 --filter "foo=bar" --filter "bif=baz")。多个过滤器标志将被组合为 OR 过滤器。例如,-f name=redis.1 -f name=redis.7 将返回 redis.1 和 redis.7 两个任务。
目前支持的过滤器有:
- id:匹配任务的完整 ID 或 ID 的前缀。
- name:匹配任务名称。
- node:匹配节点名称或节点 ID。
- desired-state:匹配期望状态(running、shutdown、ready 或 accepted)。
例如:
docker stack ps -f "id=t" voting ID NAME IMAGE NODE DESIRED STATE CURRENTSTATE ERROR PORTS tz6j82jnwrx7 voting_db.1 postgres:9.4 node1 Running Running 14 minutes ago t72q3z038jeh voting_redis.2 redis:alpine node3 Running Running 14 minutes ago
docker stack ps -f "name=voting_redis" voting ID NAME IMAGE NODE DESIRED STATE CURRENTSTATE ERROR PORTS w48spazhbmxc voting_redis.1 redis:alpine node2 Running Running 17 minutes ago t72q3z038jeh voting_redis.2 redis:alpine node3 Running Running 17 minutes ago
docker stack ps -f "node=node1" voting ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS q7yik0ks1in6 voting_result.1 dockersamples/examplevotingapp_result:before node1 Running Running 18 minutes ago tz6j82jnwrx7 voting_db.1 postgres:9.4 node1 Running Running 18 minutes ago 6jj1m02freg1 voting_visualizer.1 dockersamples/visualizer:stable node1 Running Running 18 minutes ago
docker stack ps -f "desired-state=running" voting ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS xim5bcqtgk1b voting_worker.1 dockersamples/examplevotingapp_worker:latest node2 Running Running 21 minutes ago q7yik0ks1in6 voting_result.1 dockersamples/examplevotingapp_result:before node1 Running Running 21 minutes ago rx5yo0866nfx voting_vote.1 dockersamples/examplevotingapp_vote:before node3 Running Running 21 minutes ago tz6j82jnwrx7 voting_db.1 postgres:9.4 node1 Running Running 21 minutes ago w48spazhbmxc voting_redis.1 redis:alpine node2 Running Running 21 minutes ago 6jj1m02freg1 voting_visualizer.1 dockersamples/visualizer:stable node1 Running Running 21 minutes ago kqgdmededccb voting_vote.2 dockersamples/examplevotingapp_vote:before node2 Running Running 21 minutes ago t72q3z038jeh voting_redis.2 redis:alpine node3 Running Running 21 minutes ago
3)格式化输出(--format)
使用 --format
选项可以使用 Go 模板对任务输出进行美化打印。
下面列出了可以在 Go 模板中使用的有效占位符:
点位符 | 描述 |
.ID | 任务 ID |
.Name | 任务名称 |
.Image | 任务镜像 |
.Node | 节点 ID |
.DesiredState | 任务的期望状态(running、shutdown 或 accepted) |
.CurrentState | 任务的当前状态 |
.Error | 错误信息 |
.Ports | 任务发布的端口 |
当使用 --format
选项时,stack ps 命令会根据模板的声明精确输出数据,或者在使用 table 指令时还会包含列标题。
下面的示例使用没有列标题的模板,以冒号 (:) 分隔输出所有任务的 Name 和 Image 项:
docker stack ps --format "{{.Name}}: {{.Image}}" voting voting_worker.1: dockersamples/examplevotingapp_worker:latest voting_result.1: dockersamples/examplevotingapp_result:before voting_vote.1: dockersamples/examplevotingapp_vote:before voting_db.1: postgres:9.4 voting_redis.1: redis:alpine voting_visualizer.1: dockersamples/visualizer:stable voting_vote.2: dockersamples/examplevotingapp_vote:before voting_redis.2: redis:alpine
要以 JSON 格式列出所有任务,可以使用 json 指令:
docker stack ps --format json myapp {"CurrentState":"Preparing 23 seconds ago","DesiredState":"Running","Error":"","ID":"2ufjubh79tn0","Image":"localstack/localstack:latest","Name":"myapp_localstack.1","Node":"docker-desktop","Ports":""} {"CurrentState":"Running 20 seconds ago","DesiredState":"Running","Error":"","ID":"roee387ngf5r","Image":"redis:6.0.9-alpine3.12","Name":"myapp_redis.1","Node":"docker-desktop","Ports":""} {"CurrentState":"Preparing 13 seconds ago","DesiredState":"Running","Error":"","ID":"yte68ouq7glh","Image":"postgres:13.2-alpine","Name":"myapp_repos-db.1","Node":"docker-desktop","Ports":""}
4)不映射 ID 到名称(--no-resolve)
--no-resolve
选项显示任务名称的 ID,而不将 ID 映射到名称。
docker stack ps --no-resolve voting ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS xim5bcqtgk1b 10z9fjfqzsxnezo4hb81p8mqg.1 dockersamples/examplevotingapp_worker:latest qaqt4nrzo775jrx6detglho01 Running Running 30 minutes ago q7yik0ks1in6 hbxltua1na7mgqjnidldv5m65.1 dockersamples/examplevotingapp_result:before mxpaef1tlh23s052erw88a4w5 Running Running 30 minutes ago rx5yo0866nfx qyprtqw1g5nrki557i974ou1d.1 dockersamples/examplevotingapp_vote:before kanqcxfajd1r16wlnqcblobmm Running Running 31 minutes ago tz6j82jnwrx7 122f0xxngg17z52be7xspa72x.1 postgres:9.4 mxpaef1tlh23s052erw88a4w5 Running Running 31 minutes ago w48spazhbmxc tg61x8myx563ueo3urmn1ic6m.1 redis:alpine qaqt4nrzo775jrx6detglho01 Running Running 31 minutes ago 6jj1m02freg1 8cqlyi444kzd3panjb7edh26v.1 dockersamples/visualizer:stable mxpaef1tlh23s052erw88a4w5 Running Running 31 minutes ago kqgdmededccb qyprtqw1g5nrki557i974ou1d.2 dockersamples/examplevotingapp_vote:before qaqt4nrzo775jrx6detglho01 Running Running 31 minutes ago t72q3z038jeh tg61x8myx563ueo3urmn1ic6m.2 redis:alpine kanqcxfajd1r16wlnqcblobmm Running Running 31 minutes ago
5)不截断输出(--no-trunc)
当部署一个服务时,Docker 会解析服务镜像的摘要,并将服务钉定到该摘要。默认情况下不显示摘要,但使用 --no-trunc 选项后会显示。--no-trunc 选项还会显示非截断的任务 ID 和错误消息,示例如下:
docker stack ps --no-trunc voting ID NAME IMAGE NODE DESIRED STATE CURREN STATE ERROR PORTS xim5bcqtgk1bxqz91jzo4a1s5 voting_worker.1 dockersamples/examplevotingapp_worker:latest@sha256:3e4ddf59c15f432280a2c0679c4fc5a2ee5a797023c8ef0d3baf7b1385e9fed node2 Running Runnin 32 minutes ago q7yik0ks1in6kv32gg6y6yjf7 voting_result.1 dockersamples/examplevotingapp_result:before@sha256:83b56996e930c292a6ae5187fda84dd6568a19d97cdb933720be15c757b7463 node1 Running Runnin 32 minutes ago rx5yo0866nfxc58zf4irsss6n voting_vote.1 dockersamples/examplevotingapp_vote:before@sha256:8e64b182c87de902f2b72321c89b4af4e2b942d76d0b772532ff27ec4c6ebf6 node3 Running Runnin 32 minutes ago tz6j82jnwrx7n2offljp3mn03 voting_db.1 postgres:9.4@sha256:6046af499eae34d2074c0b53f9a8b404716d415e4a03e68bc1d2f8064f2b027 node1 Running Runnin 32 minutes ago w48spazhbmxcmbjfi54gs7x90 voting_redis.1 redis:alpine@sha256:9cd405cd1ec1410eaab064a1383d0d8854d1ef74a54e1e4a92fb4ec7bdc3ee7 node2 Running Runnin 32 minutes ago 6jj1m02freg1n3z9n1evrzsbl voting_visualizer.1 dockersamples/visualizer:stable@sha256:f924ad66c8e94b10baaf7bdb9cd491ef4e982a1d048a56a17e02bf5945401e5 node1 Running Runnin 32 minutes ago kqgdmededccbhz2wuc0e9hx7g voting_vote.2 dockersamples/examplevotingapp_vote:before@sha256:8e64b182c87de902f2b72321c89b4af4e2b942d76d0b772532ff27ec4c6ebf6 node2 Running Runnin 32 minutes ago t72q3z038jehe1wbh9gdum076 voting_redis.2 redis:alpine@sha256:9cd405cd1ec1410eaab064a1383d0d8854d1ef74a54e1e4a92fb4ec7bdc3ee7 node3 Running Runnin 32 minutes ago
6)仅显示任务 ID(-q 或 --quiet)
-q
或 --quiet
选项仅显示堆栈中任务的 ID。以下示例输出“voting”堆栈的所有任务 ID:
docker stack ps -q voting xim5bcqtgk1b q7yik0ks1in6 rx5yo0866nfx tz6j82jnwrx7 w48spazhbmxc 6jj1m02freg1 kqgdmededccb t72q3z038jeh
此选项可用于批量操作。例如,可以将任务 ID 作为其他命令(如 docker inspect)的输入。以下示例检查“voting”堆栈的所有任务:
docker inspect $(docker stack ps -q voting) [ { "ID": "xim5bcqtgk1b1gk0krq1", "Version": { <...>
4、命令选项
选项 | 默认值 | 描述 |
--filter, -f | 基于提供的条件对输出进行筛选 | |
--format | 使用自定义模板格式化输出: 'table': 以带有列标题的表格格式打印输出(默认值) 'table TEMPLATE': 使用给定的Go模板以表格格式打印输出 'json': 以JSON格式打印输出 'TEMPLATE': 使用给定的Go模板打印输出。有关使用模板格式化输出的更多信息,请参阅 | |
--no-resolve | 不将ID映射为名称 | |
--no-trunc | 不截断输出 | |
--quiet, -q | 仅显示任务的ID |
5、子命令
命令 | 描述 |
docker stack config | 输出最终的配置文件,进行合并和插值后 |
docker stack deploy | 部署一个新的 stack 或更新现有的 stack |
docker stack ls | 列出 stacks |
docker stack ps | 列出 stack 中的任务 |
docker stack rm | 移除一个或多个 stacks |
docker stack services | 列出 stack 中的服务 |