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 的进阶用法,不仅能提升日常开发效率,更能帮助开发者在复杂容器化环境中保持对系统状态的全面掌控。建议读者在实际项目中多尝试不同参数组合,逐步形成自己的命令使用习惯。


通过本文的讲解,希望读者能够:

  1. 理解 docker ps 的核心功能与输出结构;
  2. 掌握过滤器、格式化输出等进阶技巧;
  3. 结合实际场景设计容器监控方案。
    Docker ps 命令的深度应用,将为开发者在容器化时代的高效开发与运维提供坚实基础。

最新发布