Docker容器排错必知的8个命令详解
作者:用户545842986958
作为一名IT运维工程师,日常与Docker容器打交道是必修课。当容器出现故障时,快速定位问题是我们的核心能力。今天给大家分享8个最实用的Docker排错命令。
一、docker logs -f— 查看容器日志
docker logs命令介绍
用途:获取容器的标准输出(stdout)和标准错误(stderr)日志,是定位应用层面问题的核心命令。
常用选项:
| 选项 | 说明 |
|---|---|
-f, --follow | 实时跟踪日志输出 |
--tail N | 只显示最后N行 |
--since | 显示指定时间后的日志,如--since 10m |
-t, --timestamps | 显示时间戳 |
具体示例:
排错第一步永远是看日志。docker logs 可以查看容器的标准输出和标准错误:
# 查看最近100行日志 docker logs --tail 100 my-container # 实时追踪日志变化 docker logs -f my-container # 查看指定时间段的日志 docker logs --since 2024-01-01T00:00:00 my-container
典型问题:当容器启动立即退出时,先用docker logs查看错误输出(如配置文件语法错误、端口冲突、依赖服务不可达等)。
二、docker inspect— 检查容器详细信息
docker inspect命令介绍
用途:以JSON格式输出容器或镜像的详细配置信息,包括网络设置、挂载卷、环境变量、启动命令、状态等。
常用选项:
| 选项 | 说明 |
|---|---|
-f, --format | 使用Go模板过滤指定字段 |
具体示例:
docker inspect 返回容器的完整配置和状态信息,包括网络、挂载、环境变量等:
# 查看容器完整信息
docker inspect my-container
# 只看容器IP
docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' my-container
# 查看容器挂载卷
docker inspect -f '{{json .Mounts}}' my-container | python3 -m json.tool
典型问题:
- 容器网络不通?用
inspect查看NetworkSettings下的IP、端口映射、网桥模式。 - 容器挂载卷不生效?查看
Mounts字段确认源路径和目标路径是否正确。 - 容器为什么重启?查看
State字段中的ExitCode和Error信息。
三、docker exec -it— 进入容器内部排查
docker exec命令介绍
用途:在正在运行的容器内部执行命令,相当于SSH进入容器,用于交互式排查。
常用选项:
| 选项 | 说明 |
|---|---|
-it | 分配交互式终端(常用组合) |
-d | 后台执行命令 |
-e | 设置环境变量 |
具体示例:
直接进入容器内部,查看文件系统、运行进程、配置文件:
# 进入容器bash docker exec -it my-container /bin/bash # 在容器内执行命令 docker exec my-container cat /etc/config/app.conf # 查看容器内进程 docker exec my-container ps aux
典型排查动作:
- 检查进程:
ps aux、top - 查看端口监听:
netstat -tlnp、ss -tlnp - 测试网络连通性:
curl localhost:8080、ping 8.8.8.8 - 查看配置文件:
cat /app/config.yml - 检查环境变量:
env
注意:容器需要包含shell(如bash、sh)才能交互式进入,否则只能执行单条命令。
四、docker top— 查看容器内运行的进程
docker top命令介绍
用途:显示容器内运行的进程列表(类似Linux的top命令),帮助定位进程级问题。
常用选项:无特殊选项,支持ps命令的参数(如aux)。
具体示例:
快速确认容器内服务是否正常启动:
docker top my-container
典型问题:
- 容器内某个子进程僵死:通过
docker top找到PID,再用docker exec进入后kill。 - 恶意进程或意外启动的额外进程:通过进程列表发现异常。
五、docker stats— 实时监控资源占用
docker stats命令介绍
用途:实时显示容器的CPU、内存、网络IO和磁盘IO使用情况,用于性能瓶颈排查。
常用选项:
| 选项 | 说明 |
|---|---|
--no-stream | 只输出一次当前状态 |
--format | 自定义输出格式 |
具体示例:
实时查看容器的CPU、内存、网络使用情况:
# 监控所有容器 docker stats # 监控指定容器 docker stats my-container
典型问题:
- 容器CPU持续100%:可能存在死循环或计算密集任务。
- 内存不断增长:可能存在内存泄漏,需结合
docker exec进入容器用top或free进一步分析。 - 网络IO异常高:检查是否有异常流量或日志刷屏。
六、docker events— 查看Docker事件流
docker events命令介绍
用途:实时输出Docker守护进程产生的事件流,如容器创建、启动、停止、销毁、健康检查失败等。
常用选项:
| 选项 | 说明 |
|---|---|
--filter | 按类型、标签、时间等过滤 |
--since / --until | 指定时间范围 |
具体示例:
实时跟踪Docker守护进程的事件,适合排查容器重启、网络变化等问题:
docker events
典型问题:
- 容器频繁重启:查看事件流中是否有
die和start反复出现。 - 健康检查失败:通过事件看到
health_status: unhealthy,再配合docker inspect查看健康检查配置。
七、docker system df— 检查磁盘空间占用
磁盘满了?看看是谁占了空间:
docker system df # 查看详情 docker system df -v
八、docker diff— 查看容器文件系统变更
查看容器启动后文件系统的变化,排查配置丢失或异常修改:
docker diff my-container
总结
这8个命令涵盖了Docker排错的完整链路:
| 命令 | 用途 | 优先级 |
|---|---|---|
docker logs | 看日志,定位错误原因 | ⭐⭐⭐ |
docker inspect | 查配置,确认网络/挂载 | ⭐⭐⭐ |
docker exec | 进容器,深入排查 | ⭐⭐ |
docker top | 看进程,确认服务状态 | ⭐⭐ |
docker stats | 监控资源,排查性能 | ⭐⭐ |
docker events | 跟踪事件流 | ⭐ |
docker system df | 查磁盘占用 | ⭐ |
docker diff | 查看文件变更 | ⭐ |
80%的容器问题都可以通过前3个命令定位到原因。建议收藏,遇到容器故障时拿出来照着排查。
到此这篇关于Docker容器排错必知的8个命令详解的文章就介绍到这了,更多相关Docker容器排错命令内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
