EC2上Docker部署的Jenkins运行Selenium用例无法找到已存在的chromedriver
问题根本原因
你的Jenkins服务运行在Docker容器中,容器默认与EC2宿主机的文件系统隔离。你在宿主机/home/ec2-user/路径下存放的chromedriver文件,没有挂载到Jenkins容器内部的对应路径,因此容器内的Jenkins进程无法读取该文件,才会抛出文件不存在的报错。你当前的容器启动命令仅挂载了/var/jenkins_home、docker相关组件、以及/home/ec2-user/source/tyoc/jenkins路径,未包含你存放驱动的/home/ec2-user/workspace路径。
排查验证步骤
- 在Jenkins任务的构建步骤中新增一行shell执行命令:
ls -l /home/ec2-user/workspace/PJTest/src/main/resources/drivers/chromedriver,运行任务查看输出,即可确认容器内部是否真的存在该文件。 - 同时新增
pwd命令输出Jenkins任务当前工作目录,确认与你预期的路径是否一致。 - 宿主机执行
docker inspect <Jenkins容器ID> | grep Mounts -A 20,即可查看容器所有挂载配置,确认目标路径是否已经完成映射。
解决方案
- 方案1:修改Jenkins容器启动命令,新增挂载参数
-v /home/ec2-user/workspace:/home/ec2-user/workspace,将宿主机存放驱动的路径映射到容器内的同路径,重启容器即可生效。 - 方案2:将chromedriver文件移动到已完成挂载的
/var/jenkins_home路径下,同时修改Selenium代码中驱动的读取路径,指向容器内/var/jenkins_home下的对应位置,无需新增挂载配置。 - 路径映射配置完成后,需要给chromedriver授予可执行权限:
chmod +x chromedriver,同时确认Jenkins进程的运行用户(默认是jenkins用户)对该文件有读取、执行权限。
内容的提问来源于stack exchange,提问作者miserable
相关产品推荐
相关产品推荐

