WebDriverManager的.dockerVolume()在Linux虚拟机引发连接重置错误
我用WebDriverManager在Docker中运行自动化测试,为了让测试能访问文件,用以下代码挂载目录:
WebDriverManager wdm = WebDriverManager.chromedriver().browserInDocker().enableVnc().enableRecording().dockerVolumes("/home/GitHub/e2e-test:/home/selenium"); driver = wdm.create();
这段代码在本地运行完全正常,但在GCP的Debian GNU/Linux 11虚拟机上,不添加.dockerVolume()时测试可以正常执行:
WebDriverManager wdm = WebDriverManager.chromedriver().browserInDocker().enableVnc().enableRecording(); driver = wdm.create();
一旦加上.dockerVolume(),就持续抛出错误:
io.github.bonigarcia.wdm.config.WebDriverManagerException: There was an error creating WebDriver object for Chrome
at io.github.bonigarcia.wdm.WebDriverManager.instantiateDriver(WebDriverManager.java:1775)
at io.github.bonigarcia.wdm.WebDriverManager.create(WebDriverManager.java:425)
at e2e.toolset.WebDriverTool.setDriver(WebDriverTool.java:13)
详细日志显示存在Connection reset、Chrome启动崩溃、DevToolsActivePort文件不存在等问题。
针对GCP虚拟机上挂载卷后出现的Chrome启动问题,可按以下步骤排查修复:
修复挂载目录权限
GCP虚拟机宿主目录/home/GitHub/e2e-test的权限可能限制了Docker容器内默认的selenium用户(UID 1200)访问,执行命令调整权限:sudo chown -R 1200:1200 /home/GitHub/e2e-test sudo chmod -R 755 /home/GitHub/e2e-test也可以在挂载时添加强制安全上下文参数适配SELinux:
dockerVolumes("/home/GitHub/e2e-test:/home/selenium:Z")添加Chrome启动参数解决端口问题
挂载卷后Chrome可能无法正常生成DevTools端口文件,手动添加启动参数规避沙箱、内存及端口冲突:WebDriverManager wdm = WebDriverManager.chromedriver() .browserInDocker() .enableVnc() .enableRecording() .dockerVolumes("/home/GitHub/e2e-test:/home/selenium") .capabilities(new ChromeOptions() .addArguments("--no-sandbox") .addArguments("--disable-dev-shm-usage") .addArguments("--remote-debugging-port=9222") .addArguments("--user-data-dir=/home/selenium/chrome-profile")); driver = wdm.create();检查Docker daemon权限
确保当前用户拥有Docker操作权限,将用户加入docker组并重启服务:sudo usermod -aG docker $USER newgrp docker sudo systemctl restart docker验证挂载路径有效性
手动启动测试容器确认挂载是否正常:docker run -v /home/GitHub/e2e-test:/home/selenium selenium/standalone-chrome:latest ls -la /home/selenium若能看到宿主目录文件则挂载正常,否则检查路径拼写或权限设置。
内容的提问来源于stack exchange,提问作者Furkan

