Docker ps 命令(千字长文)
💡一则或许对你有用的小广告
欢迎加入小哈的星球 ,你将获得:专属的项目实战(已更新的所有项目都能学习) / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论
- 新开坑项目:《Spring AI 项目实战》 正在持续爆肝中,基于 Spring AI + Spring Boot 3.x + JDK 21..., 点击查看 ;
- 《从零手撸:仿小红书(微服务架构)》 已完结,基于
Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...,点击查看项目介绍 ;演示链接: http://116.62.199.48:7070 ;- 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/ ;
截止目前, 星球 内专栏累计输出 100w+ 字,讲解图 4013+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 3700+ 小伙伴加入学习 ,欢迎点击围观
在容器化技术蓬勃发展的今天,Docker 已经成为开发者构建、部署和运行应用程序的必备工具。而掌握 Docker 命令行操作是高效使用 Docker 的核心能力之一。在众多 Docker 命令中,docker ps 是开发者最常使用的命令之一,它能够帮助用户快速查看正在运行的容器状态,是监控和调试容器的“透视镜”。本文将从基础到进阶,结合实际案例,深入解析 docker ps 命令的功能、参数及应用场景,帮助开发者构建系统化的容器管理思维。
一、什么是 Docker ps 命令?
docker ps 是 Docker 提供的用于列出当前正在运行容器的核心命令。它类似于 Linux 系统中的 ps 命令,但专为 Docker 容器设计。通过该命令,开发者可以直观地查看容器的 ID、名称、创建时间、端口映射、关联的镜像等关键信息。
形象比喻:
可以把 docker ps 理解为 Docker 世界的“交通监控系统”。就像城市交通监控中心通过屏幕实时观察车辆状态一样,开发者通过 docker ps 可以实时观察所有容器的运行状况,及时发现异常或资源占用问题。
二、基础用法:查看运行中的容器
1. 默认模式
执行最简单的 docker ps 命令,默认会列出所有正在运行的容器。
docker ps  
输出示例:
CONTAINER ID   IMAGE          COMMAND                  CREATED          STATUS          PORTS                  NAMES  
abc123        nginx:latest   "nginx -g 'daemon off"   2 minutes ago    Up 2 minutes    0.0.0.0:80->80/tcp     my_nginx  
def456        mysql:5.7      "docker-entrypoint..."   5 minutes ago    Up 5 minutes    3306/tcp               mysql_db  
关键字段解释:
- CONTAINER ID:容器的唯一标识符(前 12 位哈希值)。
- IMAGE:容器使用的镜像名称及标签。
- COMMAND:容器启动时运行的命令。
- CREATED:容器的创建时间。
- STATUS:容器的当前状态(如 Up 2 minutes表示运行中)。
- PORTS:容器端口与宿主机端口的映射关系。
- NAMES:容器的名称(用户自定义或 Docker 自动生成的名称)。
2. 查看所有容器(包括已停止的)
默认情况下,docker ps 仅显示运行中的容器。若需查看所有容器(包括已停止的),需添加 -a(或 --all)参数:
docker ps -a  
输出示例:
CONTAINER ID   IMAGE          STATUS                     NAMES  
abc123        nginx:latest   Up 2 minutes               my_nginx  
def456        mysql:5.7      Exited (0) 10 minutes ago  mysql_db  
ghi789        python:3.9     Exited (1) 30 minutes ago  web_app  
注意:已停止容器的 STATUS 列会显示退出码(如 Exited (0) 表示正常退出)。
三、参数详解:深度定制化查询
1. 过滤器(Filter):精准筛选容器
通过 --filter(或 -f)参数,可以按条件过滤容器列表,避免信息过载。
常用过滤条件:
| 过滤条件           | 描述                                                                 |
|-------------------|--------------------------------------------------------------------|
| status=running   | 仅显示正在运行的容器(默认行为)                                      |
| status=exited    | 仅显示已停止的容器                                                   |
| name=my_container| 按容器名称模糊匹配(支持通配符 %)                                  |
| ancestor=image   | 按基础镜像过滤(例如 ancestor=nginx)                                |
| label=key=value  | 按容器标签筛选(需提前通过 docker run --label 设置标签)              |
示例:
docker ps -a --filter ancestor=ubuntu  
docker ps -a -f "name=web"  
2. 自定义输出格式:精准提取信息
使用 --format 参数,可以按自定义模板输出结果,尤其适合与脚本结合使用。
语法:
docker ps --format="模板"  
模板变量:
- {{.ID}}:容器 ID(截取前 12 位)
- {{.Image}}:镜像名称
- {{.Status}}:容器状态
- {{.Ports}}:端口映射信息
- {{.Names}}:容器名称
示例:
docker ps --format "table {{.ID}}\t{{.Names}}"  
docker ps --format "csv {{.ID}},{{.Image}},{{.Status}}"  
3. 详细信息:查看完整状态
通过 -v(或 --verbose)参数,可以获取容器的更多元数据,例如:
- 容器创建时间(精确到秒)
- 网络信息(IP 地址、网络模式)
- 依赖的卷(Volumes)
- 配置参数(如 CPU/内存限制)
示例:
docker ps -a -v  
四、进阶技巧:与关联命令联动
1. 结合 docker inspect 获取容器详情
通过 docker ps 获取容器 ID 后,可配合 docker inspect 命令深入查看容器的配置细节。
示例:
CONTAINER_ID=$(docker ps -q -l)  
docker inspect $CONTAINER_ID  
2. 自动化监控:脚本化容器状态检查
可以编写 Shell 脚本,定期检查特定容器的运行状态,并触发告警或重启操作。
示例脚本:
#!/bin/bash  
if ! docker ps -q -f "name=my_nginx" -f "status=running" > /dev/null; then  
    echo "Nginx 容器未运行!"  
    # 可添加重启逻辑:docker start my_nginx  
fi  
五、常见问题与解决方案
1. 为什么 docker ps 无法显示容器?
- 可能原因:容器已停止(需添加 -a参数)。
- 解决方法:
docker ps -a --filter "name=your_container"
2. 如何快速停止所有容器?
结合 docker ps 的输出和 docker stop 命令:
docker stop $(docker ps -q)  
3. 如何按镜像名称过滤容器?
使用 --filter ancestor 参数:
docker ps -a --filter "ancestor=nginx"  
六、实战案例:构建多容器服务监控面板
假设我们正在运行一个包含 Web 服务器、数据库和缓存的微服务集群,可以通过以下步骤监控整体状态:
步骤 1:列出所有容器
docker ps -a  
步骤 2:按服务类型分组统计
echo "Web 服务:"  
docker ps -f "name=web" -f "status=running"  
echo "数据库服务:"  
docker ps -f "name=mysql" -f "status=running"  
步骤 3:输出 CSV 格式数据供分析工具使用
docker ps --format "csv {{.Names}},{{.Status}},{{.Ports}}" > container_status.csv  
七、结论
docker ps 命令是 Docker 生态中不可或缺的“状态仪表盘”,通过灵活运用其参数和过滤规则,开发者可以高效地管理、监控和调试容器。无论是排查容器异常、自动化运维,还是构建容器化服务的监控体系,docker ps 都是开发者工具箱中的核心工具。
掌握 docker ps 的进阶用法,不仅能提升日常开发效率,更能帮助开发者在复杂容器化环境中保持对系统状态的全面掌控。建议读者在实际项目中多尝试不同参数组合,逐步形成自己的命令使用习惯。
通过本文的讲解,希望读者能够:
- 理解 docker ps的核心功能与输出结构;
- 掌握过滤器、格式化输出等进阶技巧;
- 结合实际场景设计容器监控方案。
 Docker ps 命令的深度应用,将为开发者在容器化时代的高效开发与运维提供坚实基础。