Skip to content

检测命令按功能分为:状态体检、性能监控、磁盘空间分析、内部探知四个维度。

一、 状态体检:它还活着吗? ​

1. docker ps —— 容器的“花名册” ​

这是最常用的命令,用来查看当前哪些容器在运行。

  • 常用参数:
    • docker ps:查看正在运行的容器。
    • docker ps -a:查看所有容器(包括那些因为报错而退出的 Exited 状态)。
    • docker ps -s:显示容器占用的磁盘大小。
  • 看什么:重点看 STATUS 列。如果显示 Up 2 hours 说明很健康;如果显示 Exited (1),说明程序崩溃了。

2. docker inspect —— 容器的“户口本” ​

如果你想知道容器的 IP 地址、挂载了哪个目录、环境变量是什么,就用它。

  • 命令:docker inspect my-server
  • 技巧:配合 grep 使用。例如 docker inspect my-server | grep IPAddress 快速定位容器内网 IP。

二、 性能监控:它吃得饱吗? ​

3. docker stats —— 容器的“任务管理器” ​

这是最重要的实时监控命令。它会显示一个动态更新的列表。

  • 看什么:
    • CPU %:如果长期接近 100%,说明程序有死循环或计算压力极大。
    • MEM USAGE / LIMIT:当前内存占用情况。如果接近 Limit,可能会触发 OOM(内存溢出)导致容器被系统强杀。
    • NET I/O:网络吞吐量,判断是否有异常流量。
    • BLOCK I/O:磁盘读写压力。

三、 磁盘空间分析:它把硬盘吃爆了吗? ​

4. docker system df —— Docker 的“全身体检与磁盘大盘” ​

在宿主机磁盘告警、根目录(/)莫名其妙被吃满时,这个命令是排障的“破案神器”。Docker 默认将所有数据存放在 /var/lib/docker 下,极易把系统盘撑爆。

  • 命令:docker system df
  • 输出回显示例:
    text
    TYPE            TOTAL     ACTIVE    SIZE      RECLAIMABLE
    Images          520       17        50.59GB   49.08GB (97%)
    Containers      25        11        3.279MB   2.742kB (0%)
    Local Volumes   50        10        238B      190B (79%)
    Build Cache     0         0         0B        0B
  • 核心指标看什么:
    • Images(镜像):总数 520 个,占了 50.59GB!而当前活跃(ACTIVE)的只有 17 个。
    • RECLAIMABLE(可回收空间):最核心指标! 指没有被任何活跃容器使用的闲置资源,当前有 49.08GB (97%) 可以安全清理!
  • 疑点:加不加 2>/dev/null?
    • 2> 代表标准错误输出,/dev/null 代表黑洞。
    • 日常手动排障强烈建议不加:加了之后如果发生错误(如服务未启动或权限不足)会被吞掉导致屏幕一片空白;只有在编写自动化监控脚本时才建议加。
  • 空间释放三连招:
    • 温和清理:docker image prune(只删 <none>:<none> 虚悬镜像,绝对安全);
    • 深度瘦身:docker image prune -a(清除非活跃的旧镜像,瞬间释放几十 GB);
    • 治本迁移:在 /etc/docker/daemon.json 中配置 "data-root": "/data/docker",将 Docker 整体搬移到大容量独立数据盘。

四、 内部探知:它在干什么? ​

5. docker logs —— 容器的“黑匣子” ​

当你的接口报错(比如 500 错误),日志是唯一的救命稻草。

  • 常用参数:
    • -f (follow):实时跟踪日志输出,像刷抖音一样停不下来。
    • --tail 100:只看最后 100 行,避免被几万行历史日志淹没。
    • --since 30m:只看最近 30 分钟发生的日志。
  • 实战:docker logs -f --tail 200 my-server

6. docker top —— 容器内的“进程表” ​

你想知道容器内部具体跑了哪些 Linux 进程?

  • 命令:docker top my-server
  • 意义:在不进入容器的情况下,查看内部的 PID(进程 ID)和资源消耗,确认 Java 进程是否真的启动了。

7. docker port —— 端口映射确认 ​

  • 命令:docker port my-server
  • 用途:快速确认宿主机的端口(如 1304)到底映射到了容器内的哪个端口。

五、 进阶:如何进入内部排查? ​

如果上述命令都查不出问题,你需要**“肉身潜入”**进行深度检测:

8. docker exec —— 潜入指令 ​

  • 命令:docker exec -it my-server /bin/bash (如果报错尝试把 bash 换成 sh)。
  • 用途:进入容器后,你可以执行 ls 查看配置文件是否真的同步进去了,或者在容器内部执行 curl localhost:1304/hello 看看接口是否通畅。

六、 故障排查常见流程 ​

  1. 看状态:执行 docker ps -a。如果容器状态是 Exited,说明起都没起起来。
  2. 翻日志:执行 docker logs --tail 200。如果是代码报错(比如数据库密码不对),这里会直接打印 StackTrace。
  3. 盯性能:执行 docker stats。如果程序运行极慢,看是不是内存快爆了导致 JVM 在疯狂进行 Full GC。
  4. 查磁盘:执行 docker system df。如果宿主机报空间不足,或者容器无法创建新文件,立即检查是否堆积了大量废弃镜像或悬空卷。

基于 VitePress 构建 · 遵循 CC BY-NC-SA 4.0 许可协议