目录

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 条件:

条件示例
statusstatus=running、status=exited、status=created
namename=web(部分匹配)
labellabel=team=backend
ancestorancestor=nginx:1.30-alpine(由某个镜像创建)
exitedexited=137(按退出代码筛选)
publishpublish=8080(使用某个端口)
network / volumenetwork=appnet、volume=pgdata
healthhealth=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。

相关章节

动手练习

练习:列出所有由 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日