Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows操作系统的机器上,也可以实现虚拟化。Docker是内核虚拟化,不使用Hypervisor是不完全虚拟化,依赖内核的特性实现资源隔离。本文主要介绍Docker CLI 中 docker service ps 常用命令。

1、docker service ps 简介

docker service ps 命令用于列出一个或多个服务的任务(tasks)的详细信息。

注意:

此命令是一个集群管理命令,必须在集群管理器节点上执行。要了解经理和工人,请参阅文档中的Swarm mode部分。

参考文档:https://docs.docker.com/engine/reference/commandline/service_ps/

2、docker service ps 语法

docker service ps [OPTIONS] SERVICE [SERVICE...]

3、docker service ps 命令

1)列出属于服务的任务

以下命令显示属于 redis 服务的所有任务:

docker service ps redis

ID             NAME      IMAGE        NODE      DESIRED STATE  CURRENT STATE          ERROR  PORTS
0qihejybwf1x   redis.1   redis:3.0.5  manager1  Running        Running 8 seconds
bk658fpbex0d   redis.2   redis:3.0.5  worker2   Running        Running 9 seconds
5ls5s5fldaqg   redis.3   redis:3.0.5  worker1   Running        Running 9 seconds
8ryt076polmc   redis.4   redis:3.0.5  worker1   Running        Running 9 seconds
1x0v8yomsncd   redis.5   redis:3.0.5  manager1  Running        Running 8 seconds
71v7je3el7rr   redis.6   redis:3.0.5  worker2   Running        Running 9 seconds
4l3zm9b7tfr7   redis.7   redis:3.0.5  worker2   Running        Running 9 seconds
9tfpyixiy2i7   redis.8   redis:3.0.5  worker1   Running        Running 9 seconds
3w1wu13yupln   redis.9   redis:3.0.5  manager1  Running        Running 8 seconds
8eaxrb2fqpbn   redis.10  redis:3.0.5  manager1  Running        Running 8 seconds

除了运行的任务,输出还显示任务历史记录。例如,在将服务更新为使用 redis:3.0.6 镜像之后,输出可能如下所示:

docker service ps redis

ID            NAME         IMAGE        NODE      DESIRED STATE  CURRENT STATE                   ERROR  PORTS
50qe8lfnxaxk  redis.1      redis:3.0.6  manager1  Running        Running 6 seconds ago
ky2re9oz86r9   \_ redis.1  redis:3.0.5  manager1  Shutdown       Shutdown 8 seconds ago
3s46te2nzl4i  redis.2      redis:3.0.6  worker2   Running        Running less than a second ago
nvjljf7rmor4   \_ redis.2  redis:3.0.6  worker2   Shutdown       Rejected 23 seconds ago        "No such image: redis@sha256:6…"
vtiuz2fpc0yb   \_ redis.2  redis:3.0.5  worker2   Shutdown       Shutdown 1 second ago
jnarweeha8x4  redis.3      redis:3.0.6  worker1   Running        Running 3 seconds ago
vs448yca2nz4   \_ redis.3  redis:3.0.5  worker1   Shutdown       Shutdown 4 seconds ago
jf1i992619ir  redis.4      redis:3.0.6  worker1   Running        Running 10 seconds ago
blkttv7zs8ee   \_ redis.4  redis:3.0.5  worker1   Shutdown       Shutdown 11 seconds ago

任务历史记录中的项目数量由初始化集群时设置的 --task-history-limit 选项决定。您可以使用 docker swarm update 命令更改任务历史记录保留限制。

在部署服务时,Docker 会解析服务镜像的摘要,并将服务固定到该摘要上。默认情况下,不显示摘要,但如果使用 --no-trunc,则会显示摘要。--no-trunc 选项还显示非截断的任务 ID 和错误消息,如下所示:

docker service ps --no-trunc redis

ID                          NAME         IMAGE                                                                                NODE      DESIRED STATE  CURRENT STATE            ERROR                                                                                           PORTS
50qe8lfnxaxksi9w2a704wkp7   redis.1      redis:3.0.6@sha256:6a692a76c2081888b589e26e6ec835743119fe453d67ecf03df7de5b73d69842  manager1  Running        Running 5 minutes ago
ky2re9oz86r9556i2szb8a8af   \_ redis.1   redis:3.0.5@sha256:f8829e00d95672c48c60f468329d6693c4bdd28d1f057e755f8ba8b40008682e  worker2   Shutdown       Shutdown 5 minutes ago
bk658fpbex0d57cqcwoe3jthu   redis.2      redis:3.0.6@sha256:6a692a76c2081888b589e26e6ec835743119fe453d67ecf03df7de5b73d69842  worker2   Running        Running 5 seconds
nvjljf7rmor4htv7l8rwcx7i7   \_ redis.2   redis:3.0.6@sha256:6a692a76c2081888b589e26e6ec835743119fe453d67ecf03df7de5b73d69842  worker2   Shutdown       Rejected 5 minutes ago   "No such image: redis@sha256:6a692a76c2081888b589e26e6ec835743119fe453d67ecf03df7de5b73d69842"

2)过滤 (--filter)

过滤标志(-f 或 --filter)的格式为 key=value 对。如果有多个过滤条件,则传递多个标志(例如 --filter "foo=bar" --filter "bif=baz")。多个过滤标志组合成 OR 过滤器。例如,-f name=redis.1 -f name=redis.7 返回 redis.1 和 redis.7 任务。

目前支持的过滤条件包括:

  • id
  • name
  • node
  • desired-state

3)id

id 过滤器匹配任务的全部或部分 ID。

docker service ps -f "id=8" redis

ID             NAME      IMAGE        NODE      DESIRED STATE  CURRENT STATE      ERROR  PORTS
8ryt076polmc   redis.4   redis:3.0.6  worker1   Running        Running 9 seconds
8eaxrb2fqpbn   redis.10  redis:3.0.6  manager1  Running        Running 8 seconds

4)name

name 过滤器匹配任务名称。

docker service ps -f "name=redis.1" redis

ID            NAME     IMAGE        NODE      DESIRED STATE  CURRENT STATE      ERROR  PORTS
qihejybwf1x5  redis.1  redis:3.0.6  manager1  Running        Running 8 seconds

5)node

node 过滤器匹配节点名称或节点 ID。

docker service ps -f "node=manager1" redis

ID            NAME      IMAGE        NODE      DESIRED STATE  CURRENT STATE      ERROR  PORTS
0qihejybwf1x  redis.1   redis:3.0.6  manager1  Running        Running 8 seconds
1x0v8yomsncd  redis.5   redis:3.0.6  manager1  Running        Running 8 seconds
3w1wu13yupln  redis.9   redis:3.0.6  manager1  Running        Running 8 seconds
8eaxrb2fqpbn  redis.10  redis:3.0.6  manager1  Running        Running 8 seconds

6)desired-state

desired-state 过滤器可以采用 running、shutdown 或 accepted 的值。

7)格式化输出 (--format)

使用 --format 选项可以使用 Go 模板以漂亮的格式打印任务输出。

下面是 Go 模板的有效占位符:

点位符

描述

.ID

任务ID

.Name

任务名称

.Image

任务镜像

.Node

节点ID

.DesiredState

任务的期望状态(运行中、已关闭或已接受)

.CurrentState

任务的当前状态

.Error

错误信息

.Ports

任务发布的端口

使用 --format 选项时,service ps 命令会按照模板的声明输出数据,或者当使用 table 指令时,会包含列标题。

以下示例使用没有列标题的模板,输出所有任务的 Name 和 Image 条目,使用冒号 (:) 分隔:

docker service ps --format "{{.Name}}: {{.Image}}" top

top.1: busybox
top.2: busybox
top.3: busybox

4、命令选项

选项

描述

--filter , -f

根据提供的条件对输出进行过滤

--format

使用 Go 模板以漂亮的格式打印任务

--no-resolve

不将 ID 映射为名称

--no-trunc

不截断输出

--quiet , -q

仅显示任务 ID

5、子命令

命令

描述

docker service create

创建新的服务

docker service inspect

显示一个或多个服务的详细信息

docker service logs

获取一个服务或任务的日志

docker service ls

列出服务

docker service ps

列出一个或多个服务的任务

docker service rm

删除一个或多个服务

docker service rollback

恢复服务配置的更改

docker service scale

缩放一个或多个复制的服务

docker service update

更新一个服务的配置

推荐文档

相关文档

大家感兴趣的内容

随机列表