docker ps 是什么
docker ps 用来列出容器及其运行状态,默认只显示正在运行的容器。它是容器巡检的起点:状态、运行时长、端口映射、容器名都在一屏里;加 -a 才能看到已退出的容器,否则启动即失败的容器看起来像从未存在过。
基本信息
| 语法 | docker ps [选项] |
|---|---|
| 等价写法 | docker container ls |
| 高频选项 | -a 含已停止 -q 只输出 ID -s 附带体积 -n 2 最近 2 个 -l 最近 1 个 |
| 过滤与格式化 | --filter 按状态/名称/标签筛选,--format 用模板控制输出列 |
| 权限要求 | 能访问 Docker 守护进程即可,通常是 docker 组成员或 root |
典型使用场景
- 日常巡检:确认服务是否在运行、运行了多久、端口有没有按预期映射出去
- 批量操作前打底:用 -q 取出容器 ID 列表,喂给 stop、rm、inspect 等命令
- 排障第一步:加 -a 找出启动后立刻退出、根本没出现在默认输出里的容器
- 容量判断:用 -s 看可写层大小,快速找出写日志写满磁盘的容器
- 脚本与流水线里的存在性检查:用 --format 只取字段,避免解析表格对齐
常用示例
常用示例
docker ps # 只看运行中的容器
docker ps -a # 连已停止的一起看
docker ps -q | xargs -r docker inspect -f '{{.Name}} {{.State.Status}}' # 批量查状态
docker ps -a --format 'table {{.Names}}\t{{.Status}}\t{{.Image}}' # 自定义列
docker ps -a --filter status=exited --filter name=web # 按条件筛常见状态与含义
| 状态片段 | 含义 | 下一步动作 |
|---|---|---|
| Up 3 hours | 容器已持续运行三小时 | 正常,关注运行时长是否频繁归零 |
| Exited (0) | 主进程正常结束 | 一次性任务属于正常,常驻服务则要查启动命令 |
| Exited (1) | 主进程报错退出 | 看日志尾部,通常是配置或依赖问题 |
| Exited (137) | 被强杀或内存超限 | 查内存上限与 OOM 标记,别只改重启次数 |
| Restarting | 正在按策略反复拉起 | 先看日志找根因,重启只是重复失败 |
| Created | 只创建未启动 | 确认启动命令是否被中断 |
| Paused | 进程被挂起 | 确认是否有运维脚本暂停了容器 |
与其他命令的配合
- docker ps -q 取出 ID 列表,直接喂给 stop、rm、inspect 做批量操作
- docker ps -a --filter 先筛出目标集合,再决定处置顺序,避免误伤在线服务
- docker top 看某容器内实际进程,与 ps 的状态列对照判断容器是否真在工作
- docker port 看某个容器的端口映射明细,比 ps 的 PORTS 列更直观
容器状态由守护进程记录,反映的是主进程的存活情况;主进程活着但应用内部已经卡死时,ps 依然显示 Up,这类问题要靠健康检查或应用探针发现。
输出逐列读法
| 列 | 含义 | 怎么判断异常 |
|---|---|---|
| CONTAINER ID | 容器短 ID | 命令里可直接引用,需要唯一性时用完整 ID |
| IMAGE | 创建容器时用的镜像与标签 | 标签是 latest 时说明部署没锁版本 |
| COMMAND | 容器主进程的启动命令 | 与预期不符通常是 entrypoint 被覆盖 |
| CREATED | 容器创建至今的时间 | 刚创建却已退出,多半是配置或依赖问题 |
| STATUS | 运行状态与时长 | Up 表示运行中,Exited (137) 多为被强杀或内存超限,unhealthy 表示健康检查失败 |
| PORTS | 端口映射,显示为宿主到容器 | 这里为空说明只是容器内监听,宿主机访问不到 |
| NAMES | 容器名 | 带序号后缀说明命名冲突,旧容器还占着名字 |
STATUS 列同时承载运行时长、健康检查结果和上一次退出时间,排障时先看这一列的变化,比直接翻日志快。
脚本里不要按列位置截取输出,列宽会随内容变化;用 --format 模板或 -q 加 inspect 取值更稳。
ps 自身不会启动或修复任何东西,它只读守护进程记录的状态;容器状态与容器内应用的存活不是一回事,进程健康要看健康检查或应用自身的探针。