Docker ps 命令(千字长文)
💡一则或许对你有用的小广告
欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论
- 新项目:《从零手撸:仿小红书(微服务架构)》 正在持续爆肝中,基于
Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...
,点击查看项目介绍 ;- 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/ ;
截止目前, 星球 内专栏累计输出 82w+ 字,讲解图 3441+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 2900+ 小伙伴加入学习 ,欢迎点击围观
在容器化技术蓬勃发展的今天,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 命令的深度应用,将为开发者在容器化时代的高效开发与运维提供坚实基础。