Docker容器复制JMeter日志到主机提示文件不存在问题求助
问题原因
你在docker run命令里把主机的/home/jenkins/workspace/test_feature_test目录挂载覆盖了容器内的/usr/share/jmeter/bin目录。容器启动后,原容器/usr/share/jmeter/bin下的文件会被主机挂载目录的内容完全替代,导致原本应该生成在该目录的JMeter日志找不到。其他目录未被挂载覆盖,所以能正常复制文件。
解决方案
提供两种可行的处理方式:
方式1:挂载子目录避免覆盖bin目录
不要直接挂载到容器的bin目录,而是在容器/usr/share/jmeter/bin下创建一个专门的日志子目录,将主机目录挂载到这个子目录:
修改Jenkinsfile中的docker run命令:
docker run -v /home/jenkins/workspace/test_feature_test:/usr/share/jmeter/bin/logs mycontainer
同时调整script.sh脚本,让JMeter把日志输出到/usr/share/jmeter/bin/logs目录。这样容器原bin目录的内容不会被覆盖,日志会直接生成在挂载的子目录中,主机可直接获取。
方式2:测试完成后复制日志(不挂载覆盖)
如果不想修改挂载路径和脚本,可先让容器正常运行完成测试,再用docker cp命令提取日志:
修改Jenkinsfile的步骤:
stage('Run Test') { steps { sh 'docker build -t mycontainer . \ && docker run --name temp-jmeter-container mycontainer \ && docker cp temp-jmeter-container:/usr/share/jmeter/bin/[你的日志文件名] /home/jenkins/workspace/test_feature_test/ \ && docker rm temp-jmeter-container' } }
这里给容器指定临时名称temp-jmeter-container,测试结束后用docker cp把日志复制到主机,最后删除临时容器。这种方式不会覆盖容器bin目录,日志能正常生成并被提取。
额外检查点
- 确认
script.sh脚本中JMeter的日志输出路径,确保日志确实会生成在/usr/share/jmeter/bin(或修改后的路径)下。 - 可手动启动容器并进入内部,查看
/usr/share/jmeter/bin目录内容,核实日志是否存在,排查日志生成路径是否正确。
内容的提问来源于stack exchange,提问作者esquare
相关产品推荐
相关产品推荐

