7. Docker 在测试环境中怎么用
Docker 是测试环境中越来越常见的工具。很多公司会用 Docker 部署后端服务、数据库、Redis、MQ、Mock 服务、自动化测试环境,甚至整套测试环境都通过 Docker Compose 或 K8s 管理。测试工程师不一定要像运维一样深入 Docker 底层原理,但必须知道 Docker 在测试环境中解决什么问题、常用命令怎么用、容器异常怎么排查、日志怎么看、端口映射和数据挂载怎么理解。
面试中如果你只说“Docker 是容器”,回答会很浅。更好的回答是:Docker 可以让测试环境部署更一致、更隔离、更容易启动和回滚;测试人员会用它查看容器状态、查看日志、进入容器排查问题、确认端口映射、检查环境变量和挂载目录。这样才像真实项目经验。
一、Docker 在测试环境中解决什么问题
传统测试环境经常有这些问题:
- 开发本地能跑,测试环境跑不起来;
- 不同机器依赖版本不一致;
- 部署步骤复杂,容易漏配置;
- 多个服务互相影响;
- 环境坏了恢复成本高;
- 新人搭环境很慢;
- Redis、MQ、MySQL 等依赖安装麻烦。
Docker 的价值是把应用和运行依赖打包成镜像,通过容器运行。这样可以减少“环境不一致”导致的问题。
对测试来说,Docker 常见用途包括:
- 快速启动测试服务;
- 部署后端微服务;
- 启动 MySQL、Redis、MQ 等依赖;
- 搭建 Mock 服务;
- 运行自动化测试;
- 隔离不同项目环境;
- 快速回滚到旧版本镜像。
二、镜像和容器怎么理解
镜像可以理解为应用的模板或安装包,里面包含应用代码和运行环境。
容器是镜像运行起来后的实例。一个镜像可以启动多个容器。
举例:
mysql:8.0是 MySQL 镜像;- 用这个镜像启动后,运行中的 MySQL 就是容器;
- 后端服务打包成
order-service:1.0.0镜像; - 测试环境运行该镜像后形成订单服务容器。
面试可以这样说:镜像是静态的,容器是运行中的。
三、测试常用 Docker 命令
1. 查看运行中的容器
docker ps
可以看到容器 ID、镜像、启动命令、运行时间、端口映射、容器名。
如果要看所有容器,包括已停止的:
docker ps -a
2. 查看容器日志
docker logs -f 容器ID
测试排查服务异常时非常常用。比如接口 500,可以先看容器日志是否有 ERROR 或 Exception。
查看最近 200 行:
docker logs --tail 200 容器ID
3. 进入容器
docker exec -it 容器ID /bin/bash
如果容器没有 bash,可以用:
docker exec -it 容器ID /bin/sh
进入容器后可以查看配置、日志、目录、网络连接等。
4. 启停容器
docker stop 容器ID
docker start 容器ID
docker restart 容器ID
测试环境中重启容器前要确认影响范围,不要随便重启共享环境。
5. 查看镜像
docker images
可以确认当前机器上有哪些镜像和版本。
四、端口映射怎么理解
Docker 容器内部服务监听一个端口,宿主机对外暴露另一个端口。端口映射格式通常是:
宿主机端口:容器端口
例如:
docker run -p 18080:8080 order-service:1.0.0
表示容器内服务监听 8080,宿主机通过 18080 访问。
测试访问接口时要访问:
http://宿主机IP:18080
而不是容器内部的 8080。
很多接口访问不了的问题,实际上是端口映射理解错了。
五、环境变量和配置
Docker 启动容器时常通过环境变量传配置,例如数据库地址、Redis 地址、环境标识。
docker run -e DB_HOST=192.168.1.10 -e ENV=test order-service:1.0.0
测试要关注:
- 环境变量是否正确;
- 是否连接测试数据库;
- 是否使用测试 Redis;
- 第三方接口是否指向测试地址;
- 配置是否和预期环境一致。
如果配置错,容器能启动但业务可能异常。
六、数据卷挂载怎么理解
容器默认是临时的,删除容器后容器内数据可能丢失。数据卷挂载可以把宿主机目录挂到容器里。
例如:
docker run -v /data/logs:/app/logs order-service:1.0.0
表示容器内 /app/logs 映射到宿主机 /data/logs。
测试场景:
- 日志目录挂载到宿主机,方便查看日志;
- 上传文件目录挂载,防止容器重启后文件丢失;
- 配置文件挂载,方便不同环境使用不同配置。
挂载目录要注意权限,否则容器内服务可能无法写日志或上传文件。
七、Docker Compose 在测试中的用途
Docker Compose 可以用一个配置文件启动多个服务,比如后端服务、MySQL、Redis、MQ。
测试环境如果要快速启动一套依赖,可以使用 Compose。
常用命令:
docker compose up -d
docker compose down
docker compose logs -f
测试不一定要会写复杂 Compose 文件,但要知道它可以管理多容器环境。
八、项目场景:接口 500 怎么查 Docker 容器
假设订单服务部署在 Docker 中,接口返回 500。
排查步骤:
docker ps查看订单服务容器是否运行;- 确认镜像版本是否是本次部署版本;
- 查看端口映射是否正确;
docker logs --tail 200 容器ID查看最近日志;- 搜索 ERROR、Exception、订单号;
- 如果需要,
docker exec进入容器查看配置; - 确认数据库、Redis、MQ 地址是否正确;
- 修复后重启容器并回归接口。
这套流程比只说“看 Docker 日志”更完整。
九、项目场景:容器启动后访问不了
可能原因:
- 容器没有启动成功;
- 容器启动后立即退出;
- 端口没有映射;
- 访问了容器内部端口而不是宿主机端口;
- 服务启动失败但容器还在;
- 应用配置错误;
- Nginx 或网关转发到错误端口。
排查:
docker ps -a
docker logs 容器ID
docker port 容器ID
如果容器状态是 Exited,要重点看启动日志。
十、Docker 测试常见误区
1. 以为容器运行就代表服务正常
docker ps 只能说明容器在运行,不代表应用接口一定正常。还要看日志和接口冒烟结果。
2. 混淆宿主机端口和容器端口
测试访问接口时要看端口映射,不能随便用容器内部端口。
3. 忽略挂载目录权限
日志写不进去、文件上传失败,可能是挂载目录权限问题。
4. 不确认镜像版本
测试环境部署后要确认镜像版本,避免测到旧版本。
5. 容器重启后数据丢失
需要持久化的数据要挂载数据卷,否则容器删除后数据可能丢失。
十一、面试回答模板
如果面试官问“Docker 在测试环境中怎么用”,可以这样回答:
我理解 Docker 在测试环境中主要用于统一运行环境、快速部署服务和隔离依赖。测试中我常用
docker ps查看容器状态,用docker logs查看服务日志,用docker exec进入容器排查配置和文件,用端口映射确认接口访问地址。部署后我不会只看容器是否运行,还会确认镜像版本、端口映射、环境变量、挂载目录和接口冒烟结果。比如接口 500 时,我会先看容器是否正常运行,再看容器日志中的异常,必要时进入容器确认配置是否连接了正确的数据库、Redis 或 MQ。
十二、常见追问
追问:镜像和容器区别?
镜像是静态模板,容器是镜像运行起来后的实例。一个镜像可以启动多个容器。
追问:容器运行中是否代表服务正常?
不一定。容器运行只说明进程存在,还要看应用日志、端口映射和接口返回。
追问:端口映射怎么看?
用 docker ps 查看 PORTS 字段,理解宿主机端口和容器端口的对应关系。
追问:Docker 日志怎么看?
用 docker logs -f 容器ID 实时查看,用 --tail 查看最近日志,结合订单号、TraceId、ERROR 等关键字定位。
十三、练习清单
- 用
docker ps查看容器; - 用
docker ps -a查看已停止容器; - 用
docker logs查看日志; - 用
docker exec进入容器; - 理解镜像和容器区别;
- 理解端口映射;
- 理解环境变量配置;
- 理解数据卷挂载;
- 模拟容器启动失败;
- 准备 Docker 测试环境面试回答。
Docker 对测试来说不是炫技工具,而是测试环境管理和问题定位的重要能力。你能讲清楚容器状态、日志、端口映射、配置、挂载和接口验证,就足够应对大多数测试面试。
配套刷题:

