检测命令按功能分为:状态体检、性能监控、磁盘空间分析、内部探知四个维度。
一、 状态体检:它还活着吗?
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看看接口是否通畅。
六、 故障排查常见流程
- 看状态:执行
docker ps -a。如果容器状态是Exited,说明起都没起起来。 - 翻日志:执行
docker logs --tail 200。如果是代码报错(比如数据库密码不对),这里会直接打印 StackTrace。 - 盯性能:执行
docker stats。如果程序运行极慢,看是不是内存快爆了导致 JVM 在疯狂进行 Full GC。 - 查磁盘:执行
docker system df。如果宿主机报空间不足,或者容器无法创建新文件,立即检查是否堆积了大量废弃镜像或悬空卷。