如何使用 docker service ps 命令列出服务任务

DockerDockerBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

在本次实验中,你将学习如何有效使用 docker service ps 命令来检查和管理 Docker Swarm 服务中的任务。首先,你将列出与服务关联的任务的基本信息,了解默认输出中提供的关键细节。

在基本列表的基础上,你将探索如何使用 --no-trunc 标志来获取服务任务的完整详细信息。本实验还将指导你如何根据各种条件(如名称、运行节点和期望状态)过滤任务,以便你能精准定位特定任务。最后,你将学习如何格式化 docker service ps 命令的输出,根据自己的需求自定义显示信息。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker/ContainerOperationsGroup -.-> docker/ps("List Running Containers") docker/ContainerOperationsGroup -.-> docker/rm("Remove Container") docker/ContainerOperationsGroup -.-> docker/create("Create Container") subgraph Lab Skills docker/ps -.-> lab-555228{{"如何使用 docker service ps 命令列出服务任务"}} docker/rm -.-> lab-555228{{"如何使用 docker service ps 命令列出服务任务"}} docker/create -.-> lab-555228{{"如何使用 docker service ps 命令列出服务任务"}} end

列出服务的任务

在这一步中,你将学习如何列出 Docker Swarm 中与特定服务关联的任务。任务是 Swarm 中调度的基本单位,代表服务的一个运行实例。

首先,确保你有一个正在运行的服务。我们将使用 nginx 镜像创建一个简单的服务。

docker service create --name my-nginx nginx

此命令使用 nginx 镜像创建一个名为 my-nginx 的服务。Docker Swarm 将自动为该服务创建并管理任务。

现在,要列出 my-nginx 服务的任务,你可以使用 docker service ps 命令,后跟服务名称。

docker service ps my-nginx

你应该会看到类似以下的输出,显示与你的服务关联的任务:

ID             NAME         IMAGE          NODE         DESIRED STATE   CURRENT STATE           ERROR   PORTS
<task_id>      my-nginx.1   nginx:latest   <node_name>   Running         Running 5 seconds ago

输出提供了每个任务的相关信息,包括其 ID、名称、使用的镜像、运行的节点、期望状态和当前状态。

列出包含完整详细信息的任务

在上一步中,你学习了如何列出服务任务的基本信息。有时,你需要每个任务更详细的信息,例如完整的任务 ID、容器 ID 等。

要获取任务的完整详细信息,你可以在 docker service ps 命令中使用 --no-trunc 标志。该标志可防止 Docker 截断输出,从而显示完整的 ID 和其他信息。

让我们列出 my-nginx 服务包含完整详细信息的任务:

docker service ps --no-trunc my-nginx

你将看到与上一步类似的输出,但包含完整的任务 ID,并且根据任务的状态和配置,可能会有更详细的信息。

ID                                                           NAME         IMAGE          NODE         DESIRED STATE   CURRENT STATE            ERROR   PORTS
<full_task_id>                                               my-nginx.1   nginx:latest   <node_name>   Running         Running 10 seconds ago

将此输出与上一步的输出进行比较,你可以看到完整的任务 ID,而不是截断后的版本。当你需要精确引用特定任务时,例如在检查任务时,这非常有用。

按名称或节点过滤任务

在一个较大的 Swarm 集群中,你可能会有许多任务在多个节点上运行。为了找到特定的任务,你可以根据各种条件(如任务名称或其运行的节点)对 docker service ps 的输出进行过滤。

--filter 标志用于过滤。基本语法是 --filter "key=value"

要按名称过滤任务,你可以使用 name 键。例如,要查找名称以 my-nginx 开头的任务,你可以使用:

docker service ps --filter "name=my-nginx.1" my-nginx

此命令将仅显示 my-nginx 服务中名为 my-nginx.1 的任务。请注意,任务名称通常采用 service_name.task_number 的格式。

要按任务运行的节点进行过滤,你可以使用 node 键。首先,你需要知道任务运行所在节点的名称。你可以从 docker service ps 的输出中获取此信息。假设你的节点名称是 labex-node

docker service ps --filter "node=labex-node" my-nginx

此命令将显示 my-nginx 服务中运行在名为 labex-node 的节点上的任务。如果你的节点名称不同,请将 labex-node 替换为你节点的实际名称。

你可以通过使用多个 --filter 标志来组合过滤条件。

按期望状态过滤任务

除了按名称或节点过滤任务外,你还可以根据任务的期望状态进行过滤。期望状态表示 Swarm 管理器希望任务处于的状态(例如,RunningShutdownRejected)。

要按期望状态过滤任务,你可以使用带有 desired-state 键的 --filter 标志。

例如,要列出 my-nginx 服务中当前期望处于 Running 状态的任务,你可以使用:

docker service ps --filter "desired-state=running" my-nginx

由于我们的 my-nginx 服务正在运行,此命令将显示活动任务。

如果你想查看已关闭的任务,可以使用:

docker service ps --filter "desired-state=shutdown" my-nginx

目前,除非你已经缩减了服务规模或移除了任务,否则此命令可能不会显示任何输出。

你还可以过滤出处于 Rejected 状态的任务。此状态表示 Swarm 管理器无法启动该任务。

docker service ps --filter "desired-state=rejected" my-nginx

理解期望状态对于监控 Swarm 中服务的健康状况和状态至关重要。

格式化服务任务的输出

在最后这一步,你将学习如何自定义 docker service ps 命令的输出格式。当你想提取特定信息或将输出与其他工具集成时,这非常有用。

--format 标志允许你指定一个 Go 模板来格式化输出。你可以使用 .ID.Name.Image.Node.DesiredState.CurrentState.Error.Ports 等占位符来显示相应的任务属性。

例如,要以表格格式仅显示任务 ID、名称和镜像,你可以使用:

docker service ps --format "table {{.ID}}\t{{.Name}}\t{{.Image}}" my-nginx

此命令将生成类似如下的输出:

ID             NAME         IMAGE
<task_id>      my-nginx.1   nginx:latest

你还可以将输出格式化为值列表,这在编写脚本时很有用。例如,要仅获取任务 ID:

docker service ps --format "{{.ID}}" my-nginx

这将仅输出任务 ID。

让我们尝试另一种格式,显示任务名称及其运行所在的节点:

docker service ps --format "Task: {{.Name}} is running on node: {{.Node}}" my-nginx

输出将如下所示:

Task: my-nginx.1 is running on node: <node_name>

尝试不同的占位符和格式化选项,以获得你需要的输出。

最后,让我们清理我们创建的服务:

docker service rm my-nginx

此命令将移除 my-nginx 服务及其关联的任务。

总结

在本次实验中,你学习了如何使用 docker service ps 命令列出与 Docker Swarm 服务关联的任务。你首先创建了一个简单的 nginx 服务,然后使用 docker service ps <service_name> 查看其任务,了解了基本的输出列,如 ID、名称、镜像、节点、期望状态和当前状态。

此外,你还探索了如何通过使用 --no-trunc 标志来获取更详细的任务信息,该标志可防止输出被截断,使你能够查看每个任务的完整 ID 和其他全面的详细信息。