运行Docker镜像时Extent Report无法生成的问题求助
解决Docker容器中Maven命令未生成Report和target文件夹的问题
原Dockerfile内容
FROM maven:3.6.0-jdk-8-alpine RUN apk add curl jq #copying src from my framework COPY src /home/SeleniumFramework/src/ #copying pom.xml of my framework COPY pom.xml /home/SeleniumFramework/ RUN mvn -f /home/SeleniumFramework dependency:go-offline #copying testng.xml of my framework COPY testng.xml /home/SeleniumFramework/ ADD healthcheck.sh healthcheck.sh #Running the suite CMD mvn -f /home/SeleniumFramework/pom.xml clean test
问题描述
使用docker run -it mayankluckym/selenium-5运行镜像后,执行Maven测试命令未生成Report和target文件夹;但通过docker run -it --entrypoint sh mayankluckym/selenium-5进入容器,切换到/home/SeleniumFramework/目录后执行相同的Maven命令,能正常生成目标文件夹。
原因分析
问题核心在于容器的工作目录:
- 使用CMD执行命令时,容器默认工作目录是根目录(
/),尽管Maven命令通过-f指定了pom.xml的路径,但Maven会将target、Report等输出文件夹默认创建在当前工作目录(即根目录),而非pom.xml所在的/home/SeleniumFramework/。 - 手动进入容器后切换到目标目录执行命令时,工作目录变为
/home/SeleniumFramework/,输出文件夹自然生成在此路径下。
解决方案
在Dockerfile中添加WORKDIR指令,将工作目录指定为/home/SeleniumFramework/,确保Maven命令在正确的路径下执行,输出文件夹会直接生成在该目录中。
修改后的Dockerfile
FROM maven:3.6.0-jdk-8-alpine RUN apk add curl jq # 设置工作目录为SeleniumFramework所在路径 WORKDIR /home/SeleniumFramework/ # 复制源码到当前工作目录的src子目录 COPY src ./src/ # 复制pom.xml到当前工作目录 COPY pom.xml ./ # 离线下载依赖(无需指定-f参数,默认使用当前目录的pom.xml) RUN mvn dependency:go-offline # 复制testng.xml到当前工作目录 COPY testng.xml ./ ADD healthcheck.sh healthcheck.sh # 执行测试命令(工作目录已正确设置,无需指定pom.xml路径) CMD ["mvn", "clean", "test"]
关键修改点
- 添加
WORKDIR /home/SeleniumFramework/:后续所有命令默认在此目录下执行,简化路径写法。 - 简化COPY和RUN指令:使用相对路径替代绝对路径,更符合Docker最佳实践。
- 简化CMD命令:因工作目录已正确设置,无需再通过
-f指定pom.xml路径。
内容的提问来源于stack exchange,提问作者Mayank Mishra
相关产品推荐
相关产品推荐

