1. 概述
Docker 提供了多种方式来列出和过滤处于不同状态的容器,甚至可以自定义输出格式。本文将介绍如何使用 docker container ls
(或 docker ps
)命令来查看和筛选容器。
2. 列出容器
要列出 Docker 容器,可以使用 docker ps
或 docker container ls
命令。这两个命令功能一致,只是写法不同。
2.1. 命令别名
从 Docker 1.13 开始,Docker 将命令统一归类到其操作对象下。因此,除了 docker ps
,还可以使用 docker container list
或 docker container ls
命令。
虽然三个命令功能一致,但推荐使用新的 docker container
命令结构,更直观清晰。
2.2. 查看运行中的容器
默认情况下,docker container ls
会列出所有正在运行的容器:
$ docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1addfea727b3 mysql:5.6 "docker-en.." 2 seconds ago Up 1 second 0.0.0.0:32801->3306/tcp dazzling_hellman
09c4105cb356 nats:2.1.0-scratch "/nats-…" 17 minutes ago Up 17 minutes 4222/tcp, 6222/tcp, 8222/tcp nats-1
4cf774b9e4a4 redis:5 "docker-…" 30 minutes ago Up 30 minutes 0.0.0.0:32787->6379/tcp redis-2
以上输出显示了三个正在运行的容器:MySQL、NATS 和 Redis。
2.3. 查看所有容器(包括已停止)
默认只显示运行中的容器。若要查看所有容器(包括停止的),加上 -a
或 --all
:
$ docker container ls -a
CONTAINER ID IMAGE STATUS
1addfea727b3 mysql:5.6 Up 4 hours
32928d81a65f mysql:5.6 Exited (1) 4 hours ago
09c4105cb356 nats:2.1.0-scratch Up 4 hours
16d3c67ebd40 postgres:11 Exited (0) 4 hours ago
4cf774b9e4a4 redis:5 Up 4 hours
这里可以看到两个已经停止的容器:MySQL 和 PostgreSQL。
2.4. 查看最近创建的容器
要查看最近的 n 个容器,使用 -n <number>
或 --last <number>
:
$ docker container ls -n 2
CONTAINER ID IMAGE STATUS
1addfea727b3 mysql:5.6 Up 4 hours
32928d81a65f mysql:5.6 Exited (1) 4 hours ago
也可以使用 -l
或 --latest
查看最新的一个容器:
$ docker container ls --latest
CONTAINER ID IMAGE STATUS
1addfea727b3 mysql:5.6 Up 4 hours
2.5. 禁用输出截断
默认情况下,如果字段内容过长,Docker 会截断显示。可以通过 --no-trunc
禁用截断:
$ docker container ls --latest --no-trunc
CONTAINER ID COMMAND
1addfea727b38f484a2e0023ed7f47dcb9bbfc6e053f094c349391bb38cb3af7 "docker-entrypoint.sh mysqld"
2.6. 静默模式(仅显示容器 ID)
使用 -q
或 --quiet
可仅显示容器 ID:
$ docker container ls -q
1addfea727b3
09c4105cb356
4cf774b9e4a4
结合 --no-trunc
可显示完整 ID:
$ docker container ls --quiet --no-trunc
1addfea727b38f484a2e0023ed7f47dcb9bbfc6e053f094c349391bb38cb3af7
09c4105cb3567ba0070dacf7381b9946165908c819c0841cffaa1855766537c7
443fc0c41710ee3811e72fe5079bf4696b9318e0754c38eeab1c960f5c5a7007
b06cfe3053e521704c67a1902a7302665ae05f66ef592419f32b8c73b2a066fd
4cf774b9e4a487a2ba658de37273994161378cffe7e69fe5c928ad29e6946372
✅ 静默模式常用于将容器 ID 传给其他命令,例如强制删除所有容器:
$ docker container rm -f $(docker container ls -aq)
⚠️ 使用时务必小心,避免误删。
2.7. 查看容器大小
使用 -s
或 --size
可查看容器及其镜像的磁盘占用:
$ docker container ls --latest -s
CONTAINER ID IMAGE SIZE
1addfea727b3 mysql:5.6 2B (virtual 256MB)
2B
表示容器可写层占用大小256MB
表示镜像大小
2.8. 自定义输出格式
可以通过 --format
使用 Go 模板自定义输出格式:
$ docker container ls --format "{{.ID}} -> Based on {{.Image}}, named {{.Names}}, ({{.Status}})"
1addfea727b3 -> Based on mysql:5.6, named dazzling_hellman, (Up 3 hours)
09c4105cb356 -> Based on nats:2.1.0-scratch, named nats-1, (Up 4 hours)
4cf774b9e4a4 -> Based on redis:5, named redis-2, (Up 4 hours)
也可以输出为表格格式:
$ docker container ls --format "table {{.ID}}\t{{.Image}}\t{{.Names}}"
CONTAINER ID IMAGE NAMES
1addfea727b3 mysql:5.6 dazzling_hellman
09c4105cb356 nats:2.1.0-scratch nats-1
4cf774b9e4a4 redis:5 redis-2
模板支持的字段如下:
字段名 | 含义 |
---|---|
.ID |
容器 ID |
.Image |
镜像名和标签 |
.Command |
启动命令 |
.CreatedAt |
创建时间 |
.Running |
已运行时间 |
.Ports |
端口映射 |
.Status |
容器状态 |
.Size |
容器和镜像磁盘大小 |
.Names |
容器名称 |
.Labels |
容器标签 |
.Mounts |
挂载卷 |
.Networks |
所属网络 |
2.9. 高级过滤
除了基本的运行/停止状态过滤,还可以通过 -f
或 --filter
实现更复杂的筛选。
按退出状态过滤
$ docker container ls --filter "status=exited"
CONTAINER ID IMAGE STATUS
32928d81a65f mysql:5.6 Exited (1) 8 hours ago
16d3c67ebd40 postgres:11 Exited (0) 9 hours ago
多条件过滤
$ docker container ls --filter "status=exited" --filter "exited=1"
CONTAINER ID IMAGE STATUS
32928d81a65f mysql:5.6 Exited (1) 8 hours ago
按容器状态过滤
支持的状态包括:created
, restarting
, running
, removing
, paused
, exited
, dead
。
例如,查看被暂停的容器:
$ docker container pause redis-2
$ docker container ls --filter "status=paused"
CONTAINER ID IMAGE STATUS
4cf774b9e4a4 redis:5 Up 45 minutes (Paused)
按名称过滤
$ docker container ls -a --filter "name=pg"
CONTAINER ID IMAGE STATUS
16d3c67ebd40 postgres:11 Exited (0) 9 hours ago
按基础镜像过滤
$ docker container ls -a --filter "ancestor=postgres"
CONTAINER ID IMAGE STATUS
16d3c67ebd40 postgres:11 Exited (0) 9 hours ago
按创建时间过滤
before
: 查看某个容器之前创建的容器since
: 查看某个容器之后创建的容器
$ docker container ls --filter "before=nats-1"
CONTAINER ID IMAGE STATUS
4cf774b9e4a4 redis:5 Up 52 minutes (Paused)
$ docker container ls --filter "since=nats-1"
CONTAINER ID IMAGE STATUS
2fdc65a6effb mysql:5.6 Exited (137) 4 days ago
1addfea727b3 postgres:11 Exited (0) 3 days ago
3. 小结
通过 docker container ls
命令,我们可以灵活地列出和过滤容器,包括运行状态、退出码、创建时间、名称、镜像等多个维度。结合 -q
、--format
、--filter
等参数,可以满足自动化脚本和运维场景的需求。
如需更详细信息,建议查阅 Docker 官方文档。