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/ ;
截止目前, 星球 内专栏累计输出 90w+ 字,讲解图 3441+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 3100+ 小伙伴加入学习 ,欢迎点击围观
在容器化技术蓬勃发展的今天,Docker 已经成为开发者和运维人员的必备工具。作为 Docker 命令行工具的核心功能之一,docker ps
是日常操作中使用频率极高的指令。它不仅是查看容器运行状态的“窗口”,更是管理容器生命周期的重要工具。无论是调试代码、排查故障,还是优化资源分配,docker ps
都能提供关键信息。本文将从基础到进阶,通过案例和类比,帮助读者全面理解 docker ps
的功能与应用场景。
一、基础概念:什么是 docker ps
?
docker ps
是 Docker 提供的用于查看当前运行容器的命令。其名称来源于“process status”(进程状态)的缩写,与 Linux 系统中的 ps
命令类似,但专为 Docker 容器设计。
1.1 命令的基本用法
最简单的 docker ps
命令不带任何参数,会列出所有正在运行的容器。例如:
docker ps
执行结果会显示以下信息:
- CONTAINER ID:容器的唯一标识符(哈希值缩写)
- IMAGE:创建容器所基于的镜像名称
- COMMAND:容器启动时执行的命令
- CREATED:容器创建时间
- STATUS:当前运行状态(如 Up 3 hours 表示已运行 3 小时)
- PORTS:映射的端口信息
- NAMES:容器的名称(默认由 Docker 自动生成)
类比说明:
想象你有一个集装箱码头,每个集装箱(容器)都有编号、装载的货物(镜像)、装箱时间(CREATED)以及当前状态(是否在运输中)。docker ps
就像是码头管理员快速查看所有正在运输的集装箱的状态。
二、深入解析:docker ps
的参数与扩展功能
2.1 查看所有容器:docker ps -a
默认情况下,docker ps
只显示运行中的容器。若想查看所有容器(包括已停止的),需添加 -a
(或 --all
)参数:
docker ps -a
此时,输出中会包含 Exited
状态的容器。
2.2 过滤筛选:使用 --filter
参数
通过 --filter
(或 -f
)参数,可以按特定条件筛选结果。例如:
- 按状态过滤:仅显示已停止的容器
docker ps -a --filter "status=exited"
- 按名称过滤:查找名称包含“nginx”的容器
docker ps -a --filter "name=nginx"
- 按镜像过滤:查看基于“ubuntu”镜像的所有容器
docker ps -a --filter "ancestor=ubuntu"
类比说明:
这就像在超市货架前,用“仅显示临期商品”或“只看有机食品”的筛选器快速定位目标商品。
2.3 精简输出:docker ps -q
若只需获取容器的 ID,可用 -q
(quiet)参数:
docker ps -q
此命令会返回容器 ID 的哈希值列表,常用于与其他命令组合。例如,停止所有运行中的容器:
docker stop $(docker ps -q)
三、实战案例:docker ps
在开发与运维中的应用
3.1 场景 1:监控多容器应用
假设你正在开发一个包含 Web 服务器、数据库和缓存服务的微服务架构。启动后,通过 docker ps
可快速查看各容器的运行状态:
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
abc123 nginx:latest "nginx -g 'daemon of…" 2 hours ago Up 2 hours 0.0.0.0:80->80/tcp web-server
def456 mysql:8.0 "docker-entrypoint.s…" 3 hours ago Up 3 hours 3306/tcp db-service
ghi789 redis:6.2 "docker-entrypoint.s…" 4 hours ago Up 4 hours 6379/tcp cache-service
通过此输出,你能直观了解:
- 哪些服务在运行?
- 端口是否正确映射?(如
web-server
的 80 端口是否暴露到宿主机) - 是否有容器长时间未运行?
3.2 场景 2:清理无用容器
长期运行的 Docker 环境中,可能会积累大量已停止的容器。使用 docker ps -a --filter "status=exited"
查看后,可通过以下命令批量删除:
docker rm $(docker ps -a --filter "status=exited" -q)
此操作避免了手动逐个删除的繁琐,同时释放磁盘空间。
3.3 场景 3:结合日志排查问题
若发现某个容器状态异常(如长时间处于“Exited”状态),可先用 docker ps -a
定位其 ID,再通过 docker logs
查看日志:
docker ps -a --filter "name=my_app"
docker logs <container_id>
这类似于医生通过“症状筛查”(docker ps
)定位问题,再通过“血液检测”(日志)诊断具体原因。
四、高级技巧:与其他 Docker 命令的联动
4.1 动态实时监控:docker ps --no-trunc -w
--no-trunc
:显示完整信息(如长容器名或命令)-w
:实时刷新输出(类似tail -f
)
docker ps --no-trunc -w
此命令适合观察容器状态变化,例如在部署过程中监控服务启动进度。
4.2 自定义输出格式:--format
参数
通过 --format
可指定输出字段和格式,例如只显示容器名和状态:
docker ps --format "table {{.Names}}\t{{.Status}}"
输出示例:
web-server Up 2 hours
db-service Up 3 hours
这在脚本自动化或生成报告时非常实用。
五、常见问题与解决方案
5.1 问题:docker ps
显示的端口信息不完整?
原因:某些端口可能未通过 -p
参数映射到宿主机。
解决方法:
- 检查启动命令是否包含端口映射(如
-p 80:80
)。 - 使用
docker inspect <container_id>
获取更详细的网络配置。
5.2 问题:如何快速停止所有容器?
方法:
docker stop $(docker ps -q)
此命令通过 docker ps -q
获取所有运行容器的 ID,再传递给 docker stop
批量执行。
结论
docker ps
是 Docker 生态系统中的核心工具,其功能远不止“查看容器列表”这么简单。通过灵活使用参数、结合其他命令,它能帮助开发者高效管理容器、优化资源,并快速响应生产环境中的问题。
对于初学者,建议从基础用法开始,逐步尝试过滤、格式化等高级功能;中级开发者则可以探索与脚本、CI/CD 流程的结合。掌握 docker ps
,不仅能提升日常工作效率,更是理解 Docker 容器管理逻辑的重要起点。
关键词布局示例:
- 在标题、子标题及正文中自然提及“docker ps”
- 通过参数说明、案例和问题解答强化关键词的语境化使用