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
相关产品推荐
相关产品推荐

