Docker 监控与日志:如何排查容器问题
概述
你有没有遇到过这种情况:
- 访问不了网站,但容器明明在运行?
- 应用启动失败,却不知道哪里错了?
- 想看日志,却无从下手?
Docker 提供了强大的监控与日志工具,只要掌握几个关键命令,你就能像侦探一样,快速找到问题根源
为什么需要监控与日志
容器是“黑盒”——你无法像传统服务器那样直接登录查看进程或文件。
所以,我们必须依赖:
- 日志(Logs):查看应用输出、错误信息
- 状态(Status):了解容器是否运行、退出原因
- 资源使用(CPU/内存):判断是否资源不足
- 内部运行情况:进入容器调试
下面这 5 个命令,就是你的“排错工具箱”
5 个必备排错命令
1. docker ps —— 查看容器状态
docker ps
查看正在运行的容器:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
abc123 nginx:alpine "/entrypoint.sh" 10 minutes ago Up 10 mins 0.0.0.0:80->80/tcp web-server
如果没看到你的容器,加 -a 查看所有(包括已停止的):
docker ps -a
关注 STATUS 列:
Exited (1):表示容器启动失败,退出码非 0Restarting:可能配置了重启策略,但应用一直崩溃
2. docker logs —— 查看容器日志(最常用!)
这是最重要的排错命令,能告诉你应用到底发生了什么。
docker logs <容器名或ID>
例如:
docker logs web-server
实用选项:
| 选项 | 作用 |
|---|---|
-f | 实时跟踪日志(类似 tail -f) |
--tail 50 | 只看最后 50 行 |
-t | 显示时间戳 |
# 实时查看日志
docker logs -f web-server# 查看最近 100 行
docker logs --tail 100 web-server
提示:应用启动失败时,第一时间看 logs,通常错误信息就在这里
3. docker inspect —— 查看容器详细信息
当你需要深入了解容器的配置时,用它。
docker inspect <容器名>
它会返回一个巨大的 JSON,包含:
- IP 地址
- 挂载的卷
- 环境变量
- 网络配置
- 启动命令
- 退出原因(如果容器已停止)
快速查看 IP:
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' web-server
查看退出状态:
docker inspect -f '{{.State.Error}}' failed-container
4. docker stats —— 实时监控资源使用
怀疑容器卡顿、内存不足?用它看 CPU 和内存占用。
docker stats
输出:
CONTAINER CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O
web-server 0.5% 10MiB / 1.9GiB 0.5% 1.2kB / 0B 0B / 0B
db 2.1% 150MiB / 1GiB 15.0% ...
如果某个容器 MEM % 接近 100%,很可能被系统 OOM Kill(内存溢出终止)。
5. docker exec —— 进入容器内部调试
有时候你需要“进到容器里”看看文件、运行命令
# 进入容器的 shell
docker exec -it web-server sh
常见用途:
- 检查配置文件是否存在
- 测试网络连通性(
ping,curl) - 查看目录内容(
ls /app) - 手动运行应用命令测试
注意:生产环境慎用,避免误操作
实战排错流程
当你的应用“打不开”时,按这个顺序排查:
docker ps -a→ 看容器是否在运行,退出码是什么docker logs <容器名>→ 看是否有报错(如端口冲突、依赖缺失)docker inspect <容器名>→ 检查端口映射、环境变量是否正确docker stats→ 看是否资源耗尽docker exec -it <容器名> sh→ 进入容器手动测试
大多数问题,都能通过这 5 步解决
Docker Compose 怎么排错
如果你用 docker-compose.yml,命令类似:
| 原命令 | Compose 版本 |
|---|---|
docker logs web | docker compose logs web |
docker exec web sh | docker compose exec web sh |
docker ps | docker compose ps |
在项目目录下运行,自动识别 docker-compose.yml
总结
容器出问题不可怕,关键是知道怎么查。
记住这 5 个核心命令:
docker ps—— 看状态docker logs—— 看日志(最重要!)docker inspect—— 看细节docker stats—— 看资源docker exec—— 进去调试
掌握它们,你就能快速定位 90% 的容器问题,不再“一脸懵”
