章
目
录
Docker 是一个出色的工具,用于管理容器,提供了轻松的命令来与正在运行或已停止的容器进行交互。本文将帮助初学者熟悉列出和过滤 Docker 容器的操作。
容器是一个自包含的执行环境,共享主机系统的内核,并(可选地)与系统中的其他容器隔离开。
1.速查表
1.1. 查看 Docker 容器列表
以下是列出 Docker 容器的速查表:
命令 | 描述 |
---|---|
docker container ls |
列出所有正在运行的容器。 |
docker ps |
|
docker container ls -a |
列出所有容器(包括已停止的容器)。 |
docker ps -a |
|
docker container ls -n <number> |
列出最后的 <number> 个容器。 |
docker container ls --latest |
列出最新的容器(与 -n 1 相同)。 |
docker container ls --no-trunc |
列出在禁用列值截断后的容器。 |
docker container ls --size |
列出容器的大小。 |
docker container ls --format "<format>" |
使用 Go 模板自定义容器列表输出。 |
docker container ls --format "table {{.ID}}\t{{.Image}}\t{{.Status}}" |
以表格格式列出容器。 |
1.2. 过滤 Docker
容器 以下是过滤 Docker 容器的速查表:
命令 | 描述 |
---|---|
docker container ls --filter "status=<status>" |
列出具有特定状态的容器(例如“exited”)。 |
docker container ls --filter "name=<name>" |
列出具有特定名称的容器。 |
docker container ls --filter "ancestor=<image-name>" |
列出派生自特定镜像的容器。 |
docker container ls --filter "before=<container-name>" |
列出在特定容器之前创建的容器。 |
docker container ls --filter "since=<container-name>" |
列出在特定容器之后创建的容器。 |
docker container ls --filter "status=exited" --filter "status=paused" |
使用多个 –filter 标志组合筛选条件。 |
要了解这些命令以及它们的示例输出的更详细信息,请继续阅读本文。
2.列出 Docker 容器
Docker 有两组命令,“docker container ls” 和 “docker ps”,它们在本质上用于列出 Docker 容器,存在这两种指令是出于历史原因。
“docker container ls” 是在 Docker 1.13 中引入的,它是现代化且更结构化的 Docker CLI 的一部分。它遵循了使用 docker container 命名空间进行容器相关操作的惯例。
“docker container ls” 提供了额外的选项,用于自定义输出格式、过滤容器以及更高级的功能,因此建议在现代 Docker 环境中使用它。
2.1. 仅列出正在运行的容器
随着时间的推移,我们会不断运行容器,系统中会积累很多容器。要查找当前在主机上运行的容器,可以使用“container ls”命令,如下所示:
$ docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
56630ce85fd1 confluentinc/cp-kafka:latest "/etc/confluent/dock…" 2 minutes ago Up 2 minutes 0.0.0.0:9092->9092/tcp broker
909751e3bb4b confluentinc/cp-zookeeper:latest "/etc/confluent/dock…" 2 minutes ago Up 2 minutes 2888/tcp, 3888/tcp, 0.0.0.0:22181->2181/tcp zookeeper
此命令将列出所有当前正在运行的容器。
默认情况下,Docker 输出七列,含义如下:
列名 | 描述 |
---|---|
CONTAINER ID | 容器的唯一标识符。 |
IMAGE | 容器镜像名称及其标签,由冒号分隔。 |
COMMAND | 运行容器的命令。 |
CREATED | 容器创建时间戳。 |
STATUS | 容器状态。 |
PORTS | 主机机器与容器之间的端口映射。 |
NAMES | Docker 容器的人类可读名称。 |
2.2. 列出所有容器(包括已停止的)
如果我们不仅想列出当前正在运行的容器,还想列出系统中定义的所有容器,那么我们可以使用 -a 或 –all 命令行参数,如下所示。
请注意,redis 容器处于已退出状态。
$ docker container ls --all
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS
NAMES
df08118023d0 redis "docker-entrypoint.s…" 3 minutes ago Exited (0) 2 minutes ago
spring-boot-docker-compose-redis-1
56630ce85fd1 confluentinc/cp-kafka:latest "/etc/confluent/dock…" 3 minutes ago Up 3 minutes 0.0.0.0:9092->9092/tcp
broker
909751e3bb4b confluentinc/cp-zookeeper:latest "/etc/confluent/dock…" 3 minutes ago Up 3 minutes 2888/tcp, 3888/tcp, 0.0.0.0:22181->2181/tcp zookeeper
这将列出处于任何状态的容器,例如已创建、正在运行或已退出。
2.3. 仅列出容器 ID
有时,以完整信息列出容器可能会让人不知所措。 “container ls” 命令允许使用标志来限制命令输出中的信息。
例如,-q 或 –quiet 标志列出所有容器的 ID。
$ docker container ls --quiet
56630ce85fd1
909751e3bb4b
上述命令输出了经过修剪的容器 ID。如果我们想列出完整的容器 ID,可以使用以下命令:
$ docker container ls --no-trunc
56630ce85fd1758520522cde1e81a7168e41eb1b5582c92b41cd026405b3f599
909751e3bb4ba908cca32e86a92d61a47047830bfade87dda2408fadf5f98513
这对于强制删除系统中当前定义的所有容器,包括已停止的容器,可能非常有用。
$ docker container rm --force $(docker container ls --all --quiet)
2.4. 限制输出中的容器数量
如果我们只想列出最近使用的容器,而不是浏览旧容器和新容器的混合列表,可以使用 -n <number> 标志。
$ docker container ls -n 2
这将列出最近使用的 4 个容器。如果只想显示最新的容器,则使用 –latest 标志。
$ docker container ls --latest
3. 过滤 Docker 容器
大多数情况下,我们不关心所有容器的列表。我们只想根据某些条件看到有限数量的容器。让我们探讨一下我们有哪些选项。
3.1. 根据特定状态过滤容器
“docker container ls” 命令提供的不仅仅是列出运行或已停止的容器。我们可以根据几乎任何状态使用 -f 或 –filter 标志来列出容器。
Docker 容器可以处于以下状态:created、restarting、running、removing、paused、exited 或 dead。
以下命令筛选具有已退出状态的容器。
$ docker container ls --filter "status=exited"
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
df08118023d0 redis "docker-entrypoint.s…" 5 minutes ago Exited (0) 5 minutes ago spring-boot-docker-compose-redis-1
如果我们想选择多个状态,那么我们应该传递多个 <code>–filter</code> 选项。Docker 将列出与至少一个筛选条件匹配的容器。
$ docker container ls --filter "status=exited" --filter "status=paused"
3.2. 根据容器/镜像名称过滤容器
如果我们不确定要搜索的容器的其他属性,那么可以尝试按名称进行筛选。名称可以是部分名称或完整名称,都可以起作用。
$ docker container ls --filter "name=redis"
此命令将仅列出具有名称“mysql”的容器。这在运行多个容器并希望快速查找和检查具有特定名称的容器时非常有用。
如果我们甚至知道基本镜像名称的名称,那么名称筛选将起作用。
$ docker container ls --filter "ancestor=mysql"
在上述命令之后,Docker 将仅列出从名为“mysql”的基本镜像创建的容器。这个命令在想要查看所有派生自特定基本镜像的容器时非常有用。
4.自定义输出的高级定制
Docker 允许您以适合特定需求的方式自定义容器列表的输出。这是通过使用 Go 模板实现的。
例如,如果我们只想显示容器 ID、镜像和状态,那么可以运行以下命令。
docker container ls --format "{{.ID}} {{.Image}} {{.Status}}"
56630ce85fd1 confluentinc/cp-kafka:latest Up 7 minutes
909751e3bb4b confluentinc/cp-zookeeper:latest Up 7 minutes
如果我们想要以表格布局格式化输出,然后使用所需的列名前缀 “table”。
docker container ls --format "table {{.ID}}\t{{.Image}}\t{{.Status}}"
CONTAINER ID IMAGE STATUS
56630ce85fd1 confluentinc/cp-kafka:latest Up 7 minutes
909751e3bb4b confluentinc/cp-zookeeper:latest Up 7 minutes
参考以下字段可用于模板字符串:
- .ID – 容器 ID
- .Image – 镜像名称和标签
- .Command – 负责运行此容器的命令
- .CreatedAt – 容器创建时间
- .Running – 容器启动后的经过时间
- .Ports – 端口映射
- .Status – 容器执行状态
- .Size – 容器及其镜像的磁盘大小
- .Names – 容器名称
- .Labels – 分配给容器的所有标签
- .Mounts – 容器的卷
- .Networks – 附加到容器的所有网络名称
5.结论
本 Docker 教程提供了如何使用各种命令和选项查看和过滤 Docker 容器的全面指南,包括自定义输出格式和根据状态、名称、镜像血统等过滤容器。