You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从Docker容器中访问Gradle生成的测试报告

问题原因

你之前的挂载配置失效的核心原因是Docker的操作执行时机差异:

  • gradle build生成测试报告的步骤写在Dockerfile的RUN指令中,属于镜像构建阶段,对应你执行docker-compose build的过程,这一阶段生成的报告存储在镜像内部
  • 你配置的Volume挂载属于容器启动阶段操作,对应你执行docker-compose up的过程,此时本地空的./tests目录会直接覆盖容器内对应路径的已有内容,自然只能看到空目录

解决方案

下面提供三种可保留你现有docker-compose build+docker-compose up流程的方案,可按需选择:

方案一:调整构建执行时机(测试报告实时同步到本地)

将生成报告的构建操作移到容器启动阶段执行,挂载生效后生成的报告会直接写入本地目录:

  1. 在项目根目录新建启动脚本start.sh,内容如下:
#!/bin/sh
gradle build
java -jar ./app/build/libs/app.jar
  1. 修改Dockerfile,删除原来的RUN gradle build指令,调整为执行启动脚本:
FROM alpine:latest

RUN apk add gradle openjdk17

WORKDIR /home/proj
COPY . .

COPY start.sh /start.sh
RUN chmod +x /start.sh

ENTRYPOINT [ "/start.sh" ]
  1. 保留你之前写的docker-compose.yml挂载配置即可,后续启动容器时生成的测试报告会自动同步到本地./tests目录。

方案二:无需修改原有配置,构建后拷贝报告

如果不想调整现有Dockerfile逻辑,也不想每次启动都重新执行构建,可以在每次执行完docker-compose build后,执行以下命令将镜像内的报告拷贝到本地:

# 创建临时容器(无需启动)
docker create --name temp-app app:latest
# 拷贝测试报告到本地
docker cp temp-app:/home/proj/app/build/reports/tests/test ./tests
# 删除临时容器
docker rm temp-app

你也可以把上述命令写成shell脚本,和构建命令绑定执行,不影响原有启动流程。

方案三:使用命名卷保留镜像内原有报告

如果你不想改构建逻辑也不想额外执行拷贝命令,可以把bind挂载改为Docker命名卷,命名卷挂载时会自动把镜像内对应路径的已有内容复制到卷中:
修改docker-compose.yml配置如下:

version: "3.8"
services:
  app:
    build: .
    volumes:
      - test-reports:/home/proj/app/build/reports/tests/test

volumes:
  test-reports:

需要查看报告时,执行docker volume inspect test-reports获取卷在本地的存储路径,即可打开对应目录下的index.html查看测试结果。


内容的提问来源于stack exchange,提问作者136

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 07:06:04