Selenium Docker镜像中用Chrome Driver运行Intern JS单元测试报错问题
问题排查与解决方案
根因定位
你遇到的问题由两个核心原因导致:
- ChromeDriver与Chrome版本严重不兼容
- 容器内的Chrome无法访问运行在宿主机上的Intern代理服务
具体修复步骤
1. 修复ChromeDriver版本不兼容问题
你手动安装的ChromeDriver 2.19仅支持Chrome 44~49版本,和容器内安装的Chrome 95完全不匹配,这就是Driver info: driver.version: unknown报错的直接原因。
- 删掉你自定义DockerFile中手动安装Chrome和ChromeDriver的步骤,
selenium/standalone-chrome官方镜像已经默认预装了与当前Chrome版本完全匹配的ChromeDriver,不需要额外手动安装,避免版本冲突。 - 如果必须手动安装,要把
CHROMEDRIVER_VERSION参数修改为与Chrome 95匹配的版本,比如95.0.4638.69,ChromeDriver大版本号必须和Chrome主版本号完全一致。
2. 修复容器网络连接问题
报错中的net::ERR_CONNECTION_REFUSED是因为Chrome运行在容器内部,访问http://localhost:9000时指向的是容器自身的9000端口,而你的Intern代理服务运行在宿主机上,容器默认无法直接通过localhost访问宿主机服务,可任选以下一种方案解决:
- 方案一:修改Intern配置文件,将
proxyUrl从http://localhost:9000/改为http://你的宿主机局域网IP:9000/,比如宿主机IP为192.168.1.100,就改成http://192.168.1.100:9000/。 - 方案二:修改Docker启动命令,使用host网络模式启动容器,命令改为:
docker run -d --net=host -v /dev/shm:/dev/shm selenium/standalone-chrome
该模式下容器会和宿主机共享网络栈,容器内的localhost就等同于宿主机的localhost,可直接访问Intern代理的9000端口。
3. 验证步骤
修复后先做以下验证再跑测试:
- 访问
http://localhost:4444/ui确认Selenium控制台可正常打开,服务运行正常。 - 进入运行中的Chrome容器,执行
curl http://<替换为实际的proxyUrl地址>,确认可以正常获取返回内容,排除网络不通的问题。
内容的提问来源于stack exchange,提问作者Cian McCann
相关产品推荐
相关产品推荐

