docker ps

admin

Docker ps 是管理 Docker 容器的核心命令之一,用于实时查看当前正在运行的容器列表。掌握这个命令不仅能快速定位容器状态,还能为后续的部署、调试和优化提供基础数据支持。在容器化部署普及的今天,开发者或运维人员需要高频使用 docker ps 实现容器监控、资源分配和故障排查。

一、docker ps 基础操作 1.1 查看所有容器状态 执行 docker ps 命令即可显示所有运行中的容器信息,包含容器ID、名称、镜像、CPU/内存使用率、网络状态等关键指标。例如:

CONTAINER ID   NAME           IMAGE      CPU%   Mem%   Networks
a1b2c3d4      webapp         nginx      2.3     1.2     default
e5f6g7h8      dbserver        mysql      0.5     3.1     default

1.2 查看历史容器(包括已停止的) 添加 -a 参数可显示所有历史容器,包含已停止的容器。注意:已停止容器不会占用系统资源,但会持续占用存储空间。

1.3 筛选特定容器

  • 通过名称过滤:docker ps --filter "name=webapp"
  • 通过标签过滤:docker ps --filter "label=env=prod"
  • 结合容器状态筛选:docker ps --filter "status=running"

二、高级使用技巧 2.1 排序与分组查看

  • 按CPU使用率降序排列:docker ps -s cpu -o %cpu desc
  • 按内存占用分组:docker ps --format '{{.Name}} {{.Status}} {{.MemoryUsage}}MB'

2.2 实时监控容器 创建别名提升效率:

alias dps='docker ps -a --format "table {{.ID}}\t{{.Name}}\t{{.Image}}\t{{.Status}}\t{{.Size}}MB"'

使用 top-like 命令:
docker ps --format 'table {{.ID}}\t{{.Name}}\t{{.Image}}\t{{.Status}}\t{{.MemoryUsage}}MB' | sort -nrk5,5

2.3 关键指标解读

  • CPU%:实际使用率(非最大值)
  • Mem%:内存使用百分比(基于容器内存限制)
  • Disk:存储使用量(GB)
  • Networks:当前连接的网络

三、典型应用场景 3.1 容器部署调试

# 查看所有容器
docker ps -a

# 查看指定镜像的容器
docker ps --format='table {{.ID}}\t{{.Image}}' | grep 'nginx'

# 查看占用资源最大的容器
docker ps --format='table {{.ID}}\t{{.Name}}\t{{.Image}}\t{{.MemoryUsage}}MB' | sort -nrk3,3 | head -n 5

3.2 容器生命周期管理

  • 每日清理:docker ps -a --no-trunc | awk '{print $1}' | xargs docker rm -f
  • 定时监控:创建 crontab 任务,每小时检查一次容器状态:
    0 * * * * docker ps -a | grep 'exited' | awk '{print $1}' | xargs docker rm -f

四、注意事项与优化建议 4.1 权限问题 当出现 "no such file or directory" 错误时,需检查:

  • 用户是否属于 docker group:groups | grep docker
  • 检查权限:sudo chmod 666 /var/lib/docker/containers/

4.2 常见误操作

  • 避免直接删除运行中容器:docker rm <容器ID> 可能导致服务中断
  • 使用 docker kill <容器ID> 快速终止异常容器

4.3 性能优化

  • 添加 --filter 参数减少无效数据: docker ps --filter "status=running" --format 'table {{.ID}}\t{{.Name}}\t{{.Image}}\t{{.MemoryUsage}}MB'
  • 使用 docker stats 实时监控资源消耗,结合 docker ps 定位高负载容器

五、典型问题解决方案 5.1 容器显示为 exited 状态

  • 查看退出原因:docker inspect <容器ID> | grep ExitCode
  • 自动清理脚本:创建每日自动清理停止3天以上的容器脚本:
    #!/bin/bash
    docker ps -a --format='{{.ID}} {{.Status}} {{.ExitCode}}' | grep 'exited' | awk '{print $1}' | xargs docker rm -f

5.2 容器占用过高 操作步骤:

  1. docker ps -a | sort -nrk3,3 查找内存占用最大的容器
  2. docker inspect <容器ID> 查看详细资源使用情况
  3. docker top <容器ID> 查看实时进程和内存分布
  4. 优化后重启容器:docker restart <容器ID>

六、最佳实践建议

  1. 建立容器命名规范:

    • 格式:envRole serviceType instanceID
    • 示例:prodWeb app1 dev
  2. 使用标签系统管理容器:

    # 在docker-compose.yml中配置
    version: '3'
    services:
    web:
    image: nginx:latest
    container_name: webapp-prod
    environment:
      - ENV=prod
      - PORT=80
    networks:
      - app-network
  3. 容器监控体系搭建:

    • 使用 docker stats 实时监控
    • 配置 docker ps --format 定制化输出
    • 结合 Prometheus + Grafana 建立可视化监控
  4. 容器清理策略:

    • 每日清理:停止超过24小时的容器
    • 每周清理:保留最近7天启用的容器
    • 每月清理:保留历史记录容器

通过合理运用 docker ps 命令组合,开发者可以建立完整的容器生命周期管理体系。建议将常用命令保存为 alias:

alias dps='docker ps -a --format "table {{.ID}}\t{{.Name}}\t{{.Image}}\t{{.Status}}\t{{.Size}}MB"'

alias dps='docker ps --format "table {{.ID}}\t{{.Name}}\t{{.Image}}\t{{.Status}}\t{{.MemoryUsage}}MB"'

alias drm='docker ps -a --format "{{.ID}}" | xargs docker rm -f'

掌握这些技巧后,开发者可以更高效地管理容器环境,特别是在大规模微服务架构中,通过精准的容器监控和清理策略,能有效提升系统资源利用率。建议定期(每日)执行容器清理操作,并建立容器部署规范,确保生产环境稳定性。

文章版权声明:除非注明,否则均为tools工具箱原创文章,转载或复制请以超链接形式并注明出处。

取消
微信二维码
微信二维码
支付宝二维码