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 参数映射到宿主机。
解决方法

  1. 检查启动命令是否包含端口映射(如 -p 80:80)。
  2. 使用 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”
  • 通过参数说明、案例和问题解答强化关键词的语境化使用

最新发布