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

Docker无法复制testng.xml等文件到镜像问题求助

解决Dockerfile COPY命令找不到文件的问题

问题根源

你遇到的failed to compute cache key错误,本质是Docker构建上下文里找不到指定的文件,具体有两个核心原因:

  • testng.xml和reports/testreport.html要么不在构建上下文范围内,要么路径书写错误
  • reports/testreport.html是测试执行后才会生成的产物,构建阶段还未运行测试,该文件根本不存在

具体修复步骤

1. 修正testng.xml的COPY逻辑

把testng.xml放到in-memory-tests目录下(和Dockerfile同目录),然后修改Dockerfile中的COPY命令,使用基于构建上下文的相对路径:

# 替换原绝对路径写法,改用相对路径指向同目录的testng.xml
COPY testng.xml /app/testng.xml

执行构建时,务必在in-memory-tests目录下运行命令:

docker build .

这样Docker的构建上下文就是当前目录,能正确识别到testng.xml。

2. 移除对reports/testreport.html的提前COPY

reports/testreport.html是测试运行后的输出文件,构建阶段还未执行测试,自然找不到该文件。你需要调整Dockerfile的执行流程:

  • 先复制测试代码和依赖文件
  • 运行TestNG测试,自动生成报告文件
  • (可选)若需外部访问报告,可将报告目录挂载到宿主机,或在镜像中保留生成的文件

修正后的Dockerfile示例:

FROM openjdk:11-jre-slim

WORKDIR /app

# 复制打包好的测试类文件
COPY target/test-classes /app/test-classes
# 复制同目录下的testng.xml
COPY testng.xml /app/testng.xml

# 安装依赖并下载TestNG(若测试代码未打包TestNG)
RUN apt-get update && apt-get install -y wget
RUN wget https://repo1.maven.org/maven2/org/testng/testng/7.6.1/testng-7.6.1.jar

# 运行测试,自动生成reports目录及testreport.html
RUN java -cp "test-classes:testng-7.6.1.jar" org.testng.TestNG testng.xml

3. 验证文件存在性

如果仍报错,先检查in-memory-tests目录的文件结构,确认testng.xml存在且无拼写错误(注意Docker对路径大小写敏感):

ls in-memory-tests/

内容的提问来源于stack exchange,提问作者Aamir Mohammed suhail

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 19:15:49