健壮的集成测试需在真实容器环境中验证 Docker 镜像行为,通过 docker run 启动独立容器、端口暴露、健康检查、日志/文件观察及 docker exec 验证内部状态,覆盖 Web/CLI/数据库等典型场景,使用原生命令断言,绑定 CI 流水线强制执行。
编写健壮的集成测试来验证 Docker 镜像,核心是模拟真实运行环境、覆盖关键行为路径,并确保测试可重复、可隔离、不依赖外部状态。
避免在宿主机上安装服务或依赖本地环境,始终以 docker run 启动待测镜像为独立容器,通过端口暴露、健康检查、日志输出或文件挂载等方式观察其实际表现。
curl -f http://localhost:8080/health 或用 wait-for-it.sh)--rm 和随机端口(-p 0:8080)保证每次测试干净隔离docker exec 进入容器验证内部状态(如配置文件内容、二进制版本、用户权限)测试重点不是代码是否编译通过,而是镜像交付后能否完成预期集成任务。例如:
优先选用 Shell 原生命令组合(grep、jq、curl、timeout),避免引入复杂测试框架增加维护成本。
timeout 30s docker run ... 防止挂起阻塞 CIcurl -sSf http://... | grep -q "OK" 判断接口可用性jq -e '.status == "running"' >/dev/null 精确校验结构将集成测试脚本绑定到 docker build 后立即执行,或在 CI 中作为独立步骤运行,失败即中断发布流程。
Dockerfile 末尾添加 ONBUILD RUN ./test-integration.sh(仅用于开发调试,生产慎用)docker build -t myapp:test .,再 ./test/integration.sh myapp:test
docker rm -f $(docker ps -aq --filter ancestor=myapp:test)