检测命令按功能分为:状态体检、性能监控、内部探知三个维度。
一、 状态体检:它还活着吗?
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 logs —— 容器的“黑匣子”
当你的接口报错(比如 500 错误),日志是唯一的救命稻草。
- 常用参数:
-f(follow):实时跟踪日志输出,像刷抖音一样停不下来。--tail 100:只看最后 100 行,避免被几万行历史日志淹没。--since 30m:只看最近 30 分钟发生的日志。
- 实战:
docker logs -f --tail 200 my-server
5. docker top —— 容器内的“进程表”
你想知道容器内部具体跑了哪些 Linux 进程?
- 命令:
docker top my-server - 意义:在不进入容器的情况下,查看内部的 PID(进程 ID)和资源消耗,确认 Java 进程是否真的启动了。
6. docker port —— 端口映射确认
- 命令:
docker port my-server - 用途:快速确认宿主机的端口(如 1304)到底映射到了容器内的哪个端口。
四、 进阶:如何进入内部排查?
如果上述命令都查不出问题,你需要**“肉身潜入”**进行深度检测:
7. 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。