首页/云/云与容器速查/docker ps 查看容器
容器与 Docker106 条

docker ps 查看容器

列出容器状态:默认只显示运行中的容器,-a 显示全部(含已退出),配合 --filter 与 --format 适合脚本化巡检。

云与容器速查云更新于 2026-10-13

docker ps 是干什么的

docker ps 列出容器及其状态:默认只显示正在运行的容器,加上 -a 才会连已退出的容器一起显示。它支持按状态、名称、镜像祖先等条件过滤,也能自定义输出格式,既能当人工巡检的入口,也能嵌进脚本做批量操作的取数命令。

基本信息

基本语法docker ps [选项]
常用参数-a 显示全部容器 / -q 只输出 ID / -s 显示大小 / -n 只看最近 N 个
过滤条件--filter 支持 status=exited、name=web、ancestor=nginx、label=env=prod
格式化--format 支持 table 形式与字段占位,如 {{.Names}}、{{.Status}}
状态取值Up、Exited、Created、Restarting、Paused、Dead

典型使用场景

  • 日常巡检:确认关键服务都在运行,以及各自已经运行了多久
  • 找回异常退出的容器:加 -a 并按状态过滤,定位失败任务及其镜像
  • 批量操作取数:docker ps -q 拿到 ID 列表,交给 stop、rm、logs 处理
  • 排查端口占用:看清端口映射关系,确认宿主端口被哪个容器占用
  • 按标签筛选:用 label 过滤出某个环境或某套编排的容器
  • 生成状态报表:用 --format 输出固定列,直接喂给监控或工单系统

输出逐列读法

列含义注意点
CONTAINER ID容器 ID 的前 12 位需要完整 ID 时加 --no-trunc
IMAGE创建容器时使用的镜像不是镜像 ID,同名标签可能已被覆盖
COMMAND容器启动命令会被截断,完整内容看 inspect
CREATED创建时间不等于启动时间,重启后 STATUS 才更新
STATUS当前状态与时长Up 3 minutes 表示已运行 3 分钟
PORTS端口映射为空只说明没映射,不代表容器内没监听
NAMES容器名随机名说明创建时没加 --name

常用组合

常用组合
docker ps                                              # 只看运行中的容器
docker ps -a --filter "status=exited"                 # 找已退出的容器
docker ps -a --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"   # 固定列输出
docker ps -q                                           # 只输出 ID,便于批量处理
docker ps --filter "label=env=prod" -q | xargs docker restart   # 按标签批量重启
容器处于 Up 不代表服务可用:进程活着但端口未就绪、初始化没完成的情况很常见,判断可用性要看应用层的健康检查。
STATUS 里的时长指当前这次运行的时长,频繁重启的容器会表现为 Up 几十秒,配合重启策略一起看更容易发现异常。
Restarting 状态在列表里一闪而过,做重启排查时更应该看 docker inspect 里的重启次数与上次退出的时间。
容器数量多时,用 --format 输出固定列再交给工具处理,人工逐行读反而容易漏掉异常的那一行。

巡检与脚本化的做法

  • 把常用过滤条件固化成命令写进运维手册,值班时不必临场拼参数
  • 用标签标记业务与环境,按标签筛选比按容器名匹配更可靠
  • 输出固定列后交给监控或报表系统,人工只需要关注异常行
  • 发现容器运行时间很短时,先看重启策略与重启次数,再看日志
  • 批量操作前先把筛选结果打印出来确认,再执行实际变更
  • 把容器名与业务名的对应关系登记在发布系统里,不依赖记忆
  • 定期清理已退出的容器,避免列表膨胀掩盖真正的异常
容器数量增长后靠人工读列表会越来越不可靠:把运行状态与重启次数做成指标和告警,列表只用于定位具体实例。
状态与退出码要结合看:状态说明容器怎么结束的,退出码进一步说明是被终止还是自行退出,两者一起才能判断该改配置还是改资源。
不要依赖随机容器名:用固定名字并在发布系统里登记对应关系,批量脚本与人工排查都能准确指向目标实例。

易错点

  • 只看 docker ps 不查 -a:退出的容器被忽略,失败任务与崩溃现场一起丢掉
  • 把 STATUS 里的 Up 当成健康,服务端口其实还没监听,问题在发布后才暴露
  • 用 --format 时忘了转义制表符,脚本解析到的列错位
  • 脚本里靠容器名做标识却不加 --name,随机名每隔一阵就变,脚本随时失效
  • 批量命令直接对 docker ps -q 的结果执行,误伤正在运行的生产容器

数据来源与参考

  • Docker Docs:docker ps
  • Docker Docs:docker container ls

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌