我的测试学习站TEST LEARNING HUB
开始学习
首页/精华文章/7. Docker 在测试环境中怎么用

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。

排查步骤:

  1. docker ps 查看订单服务容器是否运行;
  2. 确认镜像版本是否是本次部署版本;
  3. 查看端口映射是否正确;
  4. docker logs --tail 200 容器ID 查看最近日志;
  5. 搜索 ERROR、Exception、订单号;
  6. 如果需要,docker exec 进入容器查看配置;
  7. 确认数据库、Redis、MQ 地址是否正确;
  8. 修复后重启容器并回归接口。

这套流程比只说“看 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 等关键字定位。

十三、练习清单

  1. 用 docker ps 查看容器;
  2. 用 docker ps -a 查看已停止容器;
  3. 用 docker logs 查看日志;
  4. 用 docker exec 进入容器;
  5. 理解镜像和容器区别;
  6. 理解端口映射;
  7. 理解环境变量配置;
  8. 理解数据卷挂载;
  9. 模拟容器启动失败;
  10. 准备 Docker 测试环境面试回答。

Docker 对测试来说不是炫技工具,而是测试环境管理和问题定位的重要能力。你能讲清楚容器状态、日志、端口映射、配置、挂载和接口验证,就足够应对大多数测试面试。

配套刷题: