目录
Docker ps 教程:列出容器(筛选与自定义格式)
docker ps 列出容器。完整的容器操作请参阅容器生命周期。
语法
docker ps [参数]
docker ps 与 docker container ls 是同一个命令。
参数
| 参数 | 说明 |
|---|---|
-a, --all | 列出所有容器,包括已停止的(默认只列出正在运行的) |
-q, --quiet | 只输出容器 ID |
-f, --filter 条件 | 筛选,可以重复使用多个 |
--format 模板 | 自定义输出格式,table、json 或 Go 模板 |
-n, --last 数字 | 最近创建的 n 个容器(包括所有状态) |
-l, --latest | 最近创建的一个容器 |
-s, --size | 显示容器的大小 |
--no-trunc | 不截断输出(完整的 ID 与命令) |
常用的 --filter 条件:
| 条件 | 示例 |
|---|---|
status | status=running、status=exited、status=created |
name | name=web(部分匹配) |
label | label=team=backend |
ancestor | ancestor=nginx:1.30-alpine(由某个镜像创建) |
exited | exited=137(按退出代码筛选) |
publish | publish=8080(使用某个端口) |
network / volume | network=appnet、volume=pgdata |
health | health=unhealthy |
示例
环境中有三个容器:正在运行的 web(nginx)和 worker1(添加了标签 team=backend),以及已经结束的 stopped1。
运行中的容器与全部容器
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c260b28b0630 alpine:3.23 "sleep 600" 2 seconds ago Up 2 seconds worker1
1ec4fdc5c592 nginx:1.30-alpine "/docker-entrypoint.…" 8 seconds ago Up 2 seconds 80/tcp web
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c260b28b0630 alpine:3.23 "sleep 600" 2 seconds ago Up 2 seconds worker1
17b5b9a8c9ce alpine:3.23 "true" 3 seconds ago Exited (0) 2 seconds ago stopped1
1ec4fdc5c592 nginx:1.30-alpine "/docker-entrypoint.…" 8 seconds ago Up 2 seconds 80/tcp web
$ docker ps -q
c260b28b0630
1ec4fdc5c592
docker ps 没有列出 stopped1,只有 docker ps -a 才能看到它,状态为 Exited (0)。-q 只输出 ID,方便交给其他命令使用。
筛选
$ docker ps -a --filter status=exited
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
17b5b9a8c9ce alpine:3.23 "true" 3 seconds ago Exited (0) 2 seconds ago stopped1
$ docker ps --filter name=work
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c260b28b0630 alpine:3.23 "sleep 600" 2 seconds ago Up 2 seconds worker1
$ docker ps --filter label=team=backend
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c260b28b0630 alpine:3.23 "sleep 600" 2 seconds ago Up 2 seconds worker1
自定义字段
$ docker ps --format "table {{.Names}}\t{{.Image}}\t{{.Status}}"
NAMES IMAGE STATUS
worker1 alpine:3.23 Up 2 seconds
web nginx:1.30-alpine Up 3 seconds
table 会添加标题行,字段之间用 \t(Tab)分隔。常用字段:.ID、.Names、.Image、.Status、.Ports、.CreatedAt、.Labels、.Size。要输出为 JSON,请使用 --format json。
大小与最新创建的容器
$ docker ps -s
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES SIZE
c260b28b0630 alpine:3.23 "sleep 600" 3 seconds ago Up 2 seconds worker1 4.1kB (virtual 9.1MB)
1ec4fdc5c592 nginx:1.30-alpine "/docker-entrypoint.…" 9 seconds ago Up 3 seconds 80/tcp web 86kB (virtual 66.8MB)
$ docker ps -n 1
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c260b28b0630 alpine:3.23 "sleep 600" 3 seconds ago Up 2 seconds worker1
SIZE中第一个数字是容器自身写入的数据大小(可写层),virtual包含镜像的大小。nginx 容器启动时写入了一些临时文件,因此大小为 86kB。-n 1只显示最近创建的一个容器。
批量处理:删除所有已停止的容器
$ docker rm $(docker ps -aq --filter status=exited)
17b5b9a8c9ce
$(...) 会先运行其中的命令,再将结果(所有已停止容器的 ID)作为 docker rm 的参数。也可以使用 docker container prune 实现相同效果(参阅清理硬盘空间)。
PowerShell 也支持
$(...)写法;Windows CMD 不支持,请改用docker container prune。
相关章节
- 容器生命周期
- docker inspect:查看单个容器的详细信息
- docker compose 命令:
docker compose ps
动手练习
练习:列出所有由 nginx:1.30-alpine 创建的容器(包括已停止的),只显示名称和状态。
答案
docker ps -a --filter ancestor=nginx:1.30-alpine --format "table {{.Names}}\t{{.Status}}"
常见问题
docker ps 看不到刚才运行的容器?
docker ps 只列出**正在运行**的容器。容器已经结束(例如一次性命令,或启动失败)时,需要使用 docker ps -a。
docker ps 和 docker container ls 一样吗?
完全一样。docker ps、docker container ls、docker container list、docker container ps 都是同一个命令。
STATUS 中的 Exited (0) 和 Exited (1) 有什么区别?
括号中是退出代码。0 表示程序正常结束,非 0 表示出错,137 表示被强制终止(例如内存不足)。使用 docker logs 查看原因。
更新于 2026年10月14日