8. Docker 日志和容器问题怎么排查
Docker 容器问题排查,是测试环境定位中非常实用的一类能力。很多项目服务已经不再直接部署在宿主机上,而是以容器方式运行。测试人员遇到接口失败、服务访问不了、部署后页面 502、容器启动后退出、日志写不进去、文件上传失败时,如果还只会用传统的 ps、tail 查宿主机日志,就可能找不到真正的问题位置。
面试中问 Docker 日志和容器排查,不是要你深入 Docker 内核,而是要看你是否知道容器化环境下的基本检查点:容器是否存在,是否运行,是否反复重启,端口映射是否正确,日志在哪里看,环境变量是否正确,挂载目录是否有权限,容器内外路径是否一致。这些点能帮助测试快速判断问题是应用异常、容器配置、网络端口、挂载权限还是镜像版本。
一、Docker 容器问题常见现象
测试环境中常见 Docker 问题包括:
- 容器启动后马上退出;
- 容器运行中,但接口访问不了;
- 接口返回 500,需要查看容器日志;
- 页面访问 502,可能网关转发到错误容器端口;
- 文件上传失败,挂载目录权限异常;
- 服务连不上数据库、Redis、MQ;
- 容器内配置和预期环境不一致;
- 部署后还是旧版本镜像;
- 容器反复重启,服务不稳定。
这些问题如果能按顺序排查,就不会一上来就甩给开发或运维。
二、第一步:查看容器状态
最常用命令:
docker ps
它只能看到正在运行的容器。如果你怀疑容器启动失败或已经退出,要用:
docker ps -a
重点看这些信息:
- 容器 ID;
- 镜像名称和版本;
- 容器状态;
- 启动时间;
- 端口映射;
- 容器名称。
如果容器状态是 Exited,说明它已经退出,要重点看启动日志。如果状态反复 Restarting,说明容器可能启动后不断异常退出。
三、第二步:查看容器日志
查看容器日志:
docker logs 容器ID
实时查看:
docker logs -f 容器ID
查看最近 200 行:
docker logs --tail 200 容器ID
如果接口刚刚报错,可以先查看最近日志,再根据业务关键字定位。
容器日志中重点看:
- 服务是否启动成功;
- 是否有 ERROR 或 Exception;
- 端口是否绑定成功;
- 数据库连接是否成功;
- Redis、MQ 是否连接成功;
- 配置文件是否加载正确;
- 是否有 permission denied;
- 是否有依赖服务连接超时。
四、第三步:确认端口映射
容器内服务端口和宿主机访问端口可能不同。
用 docker ps 查看 PORTS 字段,例如:
0.0.0.0:18080->8080/tcp
表示宿主机 18080 映射到容器内 8080。
测试访问时应该访问宿主机端口:
http://宿主机IP:18080
如果你访问 8080,可能根本访问不到。
很多 Docker 环境问题,其实是端口映射看错了。
五、第四步:进入容器排查
如果日志看不清,可以进入容器:
docker exec -it 容器ID /bin/bash
如果没有 bash:
docker exec -it 容器ID /bin/sh
进入容器后可以查看:
- 配置文件;
- 应用目录;
- 日志目录;
- 环境变量;
- 上传文件目录;
- 是否能访问依赖服务。
查看环境变量:
env
如果服务连接错数据库或 Redis,环境变量是重点检查对象。
六、第五步:检查挂载目录
Docker 常用挂载目录存日志、配置或上传文件。
例如:
/data/logs:/app/logs
如果容器内 /app/logs 无法写入,可能是宿主机 /data/logs 权限问题。
常见表现:
- 容器启动失败;
- 日志无法生成;
- 文件上传失败;
- 配置文件读取失败。
排查时要看:
- 宿主机目录是否存在;
- 宿主机目录权限是否正确;
- 容器内路径是否正确;
- 服务运行用户是否有权限;
- 是否挂载到了错误目录。
七、典型场景:容器启动后马上退出
处理步骤:
docker ps -a查看容器状态;- 确认容器是否 Exited;
docker logs 容器ID查看启动日志;- 查找 ERROR、Exception、端口占用、配置错误;
- 确认环境变量和配置文件;
- 修复后重新启动容器;
- 再次查看容器状态和接口冒烟。
常见原因:
- 启动命令错误;
- 配置文件缺失;
- 数据库连接失败;
- 端口冲突;
- 权限不足;
- 镜像版本错误。
八、典型场景:容器运行但接口访问不了
处理步骤:
docker ps确认容器运行;- 查看端口映射;
- 确认访问的是宿主机 IP 和宿主机端口;
- 查看容器日志是否有服务启动成功信息;
- 进入容器确认应用是否监听端口;
- 检查 Nginx 或网关转发;
- 检查防火墙或网络策略;
- 用接口冒烟验证。
容器运行不代表服务可用,这是面试中一定要说清楚的点。
九、典型场景:接口 500 查容器日志
接口返回 500 时,可以这样定位:
- 记录请求时间、接口路径、业务 ID;
docker logs --tail 500 容器ID查看最近日志;- 搜索订单号、用户 ID、TraceId、ERROR;
- 如果日志太多,可以先复制到文件或进入容器查看;
- 判断是代码异常、配置错误、数据库异常、依赖服务异常还是测试数据问题;
- 提 Bug 时附上接口请求、响应和关键容器日志。
面试回答可以这样讲:
Docker 环境下接口 500,我会先确认对应服务容器,再用
docker logs --tail查看最近日志,根据请求时间、订单号或 TraceId 定位异常。如果日志显示数据库连接失败或配置错误,就按环境问题处理;如果是业务异常,就整理接口和日志证据提交开发。
十、容器反复重启怎么查
容器反复重启通常说明服务启动后异常退出,并被重启策略拉起。
排查:
docker ps -a
docker logs --tail 200 容器ID
重点看最后几行日志。常见原因:
- 启动参数错误;
- 缺少配置文件;
- 依赖服务不可用;
- 端口绑定失败;
- 文件权限问题;
- 内存不足导致进程退出。
不要只看到容器在运行就认为没问题,反复重启会导致接口间歇性失败。
十一、镜像版本问题怎么确认
测试部署后,有时发现功能还是旧逻辑,可能是镜像没更新或容器没重建。
检查点:
docker ps看镜像名和 tag;- 查看部署平台构建号;
- 查看应用启动日志版本号;
- 调用版本接口;
- 确认容器创建时间;
- 确认是否拉取了最新镜像。
测试提 Bug 前最好先确认版本,避免测错环境。
十二、面试回答模板
如果面试官问“Docker 日志和容器问题怎么排查”,可以这样回答:
我会先用
docker ps查看容器是否运行,用docker ps -a查看是否有退出或重启状态。然后用docker logs查看容器日志,重点看启动是否成功、是否有 ERROR、数据库或 Redis 连接失败、端口占用、权限不足等异常。如果容器运行但接口访问不了,我会检查端口映射,确认访问的是宿主机端口;必要时用docker exec进入容器查看配置、环境变量和挂载目录。对于接口 500,我会结合请求时间、订单号或 TraceId 查看容器日志,判断是应用异常、配置问题、依赖服务问题还是测试数据问题。
十三、常见追问
追问:docker ps 看不到容器怎么办?
用 docker ps -a 查看所有容器,可能容器已经退出。
追问:容器运行是否代表服务正常?
不代表。还要看应用日志、端口映射、接口返回和依赖服务状态。
追问:容器日志怎么看最近内容?
用 docker logs --tail 200 容器ID,也可以加 -f 实时跟踪。
追问:端口映射错误会有什么表现?
容器内服务可能正常,但外部访问失败或访问到旧服务。要看宿主机端口和容器端口映射关系。
十四、练习清单
- 用
docker ps查看运行容器; - 用
docker ps -a查看退出容器; - 用
docker logs --tail查看最近日志; - 用
docker logs -f实时看日志; - 用
docker exec进入容器; - 查看容器环境变量;
- 理解端口映射;
- 排查容器启动后退出;
- 排查容器运行但接口不通;
- 准备 Docker 容器排查面试回答。
Docker 容器问题排查的核心不是命令数量,而是顺序:先看容器状态,再看日志,再看端口映射,再看配置和挂载,最后结合接口和业务数据验证。
配套刷题:

