如何使用 docker container ls 命令列出和筛选容器

DockerDockerBeginner
立即练习

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

简介

在本实验中,你将学习如何高效使用 docker container ls 命令(也称为 docker ps)来列出和管理你的 Docker 容器。首先你将列出所有当前正在运行的容器,然后扩展到包含已停止的容器。

此外,你还将探索如何根据状态、名称等多种条件筛选容器列表,并学习如何格式化输出以仅显示你需要的信息。最后,你将了解如何快速检查容器的磁盘使用情况。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker(("Docker")) -.-> docker/ImageOperationsGroup(["Image Operations"]) docker(("Docker")) -.-> docker/SystemManagementGroup(["System Management"]) docker/ContainerOperationsGroup -.-> docker/run("Run a Container") docker/ContainerOperationsGroup -.-> docker/ps("List Running Containers") docker/ImageOperationsGroup -.-> docker/pull("Pull Image from Repository") docker/SystemManagementGroup -.-> docker/system("Manage Docker") subgraph Lab Skills docker/run -.-> lab-555113{{"如何使用 docker container ls 命令列出和筛选容器"}} docker/ps -.-> lab-555113{{"如何使用 docker container ls 命令列出和筛选容器"}} docker/pull -.-> lab-555113{{"如何使用 docker container ls 命令列出和筛选容器"}} docker/system -.-> lab-555113{{"如何使用 docker container ls 命令列出和筛选容器"}} end

列出所有运行中的容器

在这一步骤中,你将学习如何列出当前所有运行中的 Docker 容器。这是管理容器和了解系统当前活动状态的基础命令。

首先,让我们拉取一个简单的镜像用于运行容器。我们将使用 hello-world 镜像,这是一个用于测试 Docker 安装的极小镜像。

docker pull hello-world

你应该能看到显示镜像正在被拉取和提取的输出信息。

现在,让我们用这个镜像运行一个容器。docker run 命令会创建并启动一个新容器。

docker run hello-world

这条命令将运行 hello-world 容器。容器会打印一条消息然后退出。即使它退出了,它仍然被视为存在于你系统上的容器,只是不在运行状态。

要查看当前正在运行的容器,你可以使用 docker ps 命令。

docker ps

由于 hello-world 容器在运行后立即退出,docker ps 命令很可能不会在 "CONTAINER ID"、"IMAGE"、"COMMAND" 等列下显示任何输出,因为当前没有运行中的容器。

让我们运行一个保持运行状态的容器。我们将使用 ubuntu 镜像并运行一个保持容器存活的简单命令。首先拉取 ubuntu 镜像。

docker pull ubuntu

现在,通过执行 sleep infinity 命令来运行一个保持运行状态的 Ubuntu 容器。-d 参数表示以分离模式(后台)运行容器。

docker run -d ubuntu sleep infinity

你会看到一长串字符,这是容器 ID。这表示容器已在后台启动。

现在,再次运行 docker ps 来查看运行中的容器。

docker ps

这次,你应该能看到列出你刚启动的 Ubuntu 容器的输出信息。输出包含容器 ID、使用的镜像、运行的命令、创建时间、状态、端口以及随机生成的名称等信息。

docker ps 命令对于快速检查系统上哪些容器处于活动状态并消耗资源至关重要。

显示所有容器(包括已停止的)

在上一步中,你学习了如何使用 docker ps 仅列出运行中的容器。但有时你需要查看系统中存在的所有容器,包括那些已经停止的容器。这对于清理旧容器或检查因错误退出的容器非常有用。

要列出所有容器(包括运行中和已停止的),你需要使用带 -a 参数的 docker ps 命令。-a 表示 "all"(全部)。

现在让我们尝试这个命令:

docker ps -a

你应该会看到一个列表,其中包含上一步中运行的 Ubuntu 容器,以及运行后已退出的 hello-world 容器。"STATUS" 列会显示容器是 "Up"(运行中)还是 "Exited"(已退出)。

该输出提供的信息与 docker ps 相同(容器 ID、镜像、命令、创建时间、状态、端口和名称),但会显示所有容器,无论它们当前处于什么状态。

这个命令对于全面了解系统中的所有容器非常有帮助。你可以看到哪些容器已被创建,即使它们当前并不处于活动状态。

按状态和名称筛选容器

在这一步骤中,你将学习如何根据容器状态或名称来筛选容器列表。当你拥有大量容器而只需查看特定子集时,这个功能非常实用。

docker ps 命令支持 --filter 参数,允许你指定筛选条件来列出容器。

首先让我们使用筛选器仅列出运行中的容器。运行中容器的状态为 running

docker ps --filter "status=running"

这条命令应该会显示与步骤 1 中 docker ps 相同的输出,仅列出当前正在运行的 Ubuntu 容器。

现在,让我们筛选已退出的容器。已退出容器的状态为 exited。记得加上 -a 参数来查看所有容器,否则默认情况下筛选器不会找到已退出的容器。

docker ps -a --filter "status=exited"

这条命令应该会显示你在步骤 1 中运行的 hello-world 容器,因为它的状态是 "Exited"。

你也可以按容器名称进行筛选。当你运行容器时没有使用 --name 参数指定名称,Docker 会分配一个随机名称。你可以通过运行 docker ps 来查看正在运行的 Ubuntu 容器名称,查看 "NAMES" 列。

假设你的 Ubuntu 容器名称类似于 agitated_hoover,你可以按这个名称筛选:

docker ps -a --filter "name=agitated_hoover"

请将 agitated_hoover 替换为你实际的 Ubuntu 容器名称。这条命令会列出具有该特定名称的容器,无论其状态如何(不过当前情况下它应该是运行中的)。

你还可以组合多个筛选条件。例如,要查找具有特定名称且正在运行的容器:

docker ps --filter "status=running" --filter "name=agitated_hoover"

同样,请将 agitated_hoover 替换为你容器的实际名称。

筛选功能是管理和检查容器的强大工具,特别是在拥有大量容器的环境中尤为实用。

格式化输出以显示特定信息

在本步骤中,你将学习如何自定义 docker ps 命令的输出,仅显示你需要的信息。这在编写脚本或需要简洁查看容器信息时特别有用。

docker ps 命令支持 --format 参数,允许你使用 Go 模板语法指定输出格式。

首先让我们仅列出所有容器的 ID:

docker ps -a --format "{{.ID}}"

这条命令会输出所有容器(运行中和已停止)的 ID 列表,每行一个。{{.ID}} 是 Go 模板占位符,代表容器 ID。

现在,让我们列出容器 ID 和镜像名称,用制表符分隔:

docker ps -a --format "{{.ID}}\t{{.Image}}"

你应该会看到类似 [容器 ID] [镜像名称] 的输出格式。\t 在 Go 模板中表示制表符。

你还可以包含其他字段。以下是常用的可用字段:

  • .ID: 容器 ID
  • .Image: 镜像名称
  • .Command: 正在执行的命令
  • .CreatedAt: 创建时间
  • .Status: 容器状态
  • .Ports: 暴露的端口
  • .Names: 容器名称

让我们列出容器名称及其状态:

docker ps -a --format "{{.Names}}: {{.Status}}"

这将输出类似 [容器名称]: [状态] 的格式。

你还可以使用 table 格式获得更易读的输出(包含表头),类似于默认输出但只包含你指定的列:

docker ps -a --format "table {{.ID}}\t{{.Image}}\t{{.Names}}\t{{.Status}}"

这条命令会显示包含 ID、Image、Names 和 Status 列的表格,展示所有容器的信息。

通过格式化输出,你可以精细控制 docker ps 显示的信息,使其更易于在脚本中使用或满足特定的报告需求。

查看容器磁盘使用情况

在这最后一步中,你将学习如何查看 Docker 容器、镜像和卷占用的磁盘空间。这对于监控系统资源使用情况以及识别 Docker 消耗磁盘空间的位置非常重要。

docker system df 命令提供了 Docker 对象磁盘使用情况的摘要。df 代表 "disk free"(磁盘可用空间),类似于标准的 Linux 命令。

让我们运行这个命令查看磁盘使用情况:

docker system df

输出将显示包含以下内容的摘要:

  • Images(镜像): 系统中所有 Docker 镜像的总大小
  • Containers(容器): 所有容器可写层的总大小(这是容器文件系统内更改所占用的空间)
  • Local Volumes(本地卷): 所有本地卷的总大小(卷用于持久化数据存储)
  • Build Cache(构建缓存): 镜像构建过程中使用的构建缓存大小

你将看到如下列信息:

  • Total(总数): 对象的总数或总大小
  • Active(活跃数): 当前正在使用的对象数量(如运行中的容器、被运行中容器使用的镜像)
  • Size(大小): 对象占用的总磁盘空间
  • Reclaimable(可回收): 通过删除未使用对象可释放的磁盘空间量

要获取更详细的视图,可以使用 -v 参数查看详细输出:

docker system df -v

这将提供更详细的分类信息,包括各个镜像、容器和卷的列表及其各自的大小。

理解 Docker 的磁盘使用情况对于维护健康的 Docker 环境和防止磁盘空间耗尽至关重要。你可以利用 docker system df 提供的信息来决定何时清理未使用的镜像、容器或卷。

总结

在本实验中,你学习了如何使用 docker container ls 命令(也称为 docker ps)来列出 Docker 容器。你首先使用 docker ps 仅列出运行中的容器,然后通过添加 -a 参数学会了如何显示包括已停止容器在内的所有容器。

此外,你还探索了如何使用 --filter 选项根据状态和名称等条件筛选容器列表。你也学会了如何使用 --format 参数自定义输出格式以显示特定信息,以及如何使用 docker system df 命令查看容器的磁盘使用情况。