docker-compose部署Selenium Grid4报无法新建会话错误求助
Selenium 4 Grid 适配Mac M1设备异常问题解决步骤
1. 解决selenium-distributor进程退出码137问题
退出码137代表进程因内存不足被系统强制终止,对应处理方案:
- 打开Docker Desktop设置,进入「资源」-「高级」页签,将分配给Docker的内存上限从默认的2GB调整至≥4GB,CPU核心数调整至≥4核,修改后重启Docker并重跑容器集群。
- 若内存资源有限,可简化Grid部署模式:单机测试场景无需使用全分布式架构,去掉独立部署的distributor、session-map、event-bus等组件,改用Hub+Node的简化部署模式,降低资源占用。
2. 修复Mac M1芯片架构兼容性问题
M1为arm64架构,官方默认Selenium镜像多为amd64架构,使用Rosetta转译运行会出现节点无法注册、Hub服务异常的问题:
- 替换所有Selenium镜像为arm64适配版本:
- Hub使用
seleniarm/hub:4.x(社区维护的arm架构适配镜像,而非官方的selenium/hub) - Chrome节点使用
seleniarm/node-chromium,M1设备无适配的官方Chrome容器镜像,需使用Chromium的arm适配版本,禁止使用默认的selenium/node-chrome镜像。
- Hub使用
- 给docker-compose中每个Selenium服务新增
platform: linux/arm64配置,强制指定容器运行架构,避免自动转译异常。
3. 服务连通性与代码配置校验
- 容器启动后等待30s再访问
http://localhost:4444,Selenium4 Hub服务初始化需要一定时间,刚启动时无法访问属于正常现象。 - 若仍无法访问,执行
docker ps确认所有核心容器处于运行状态,若有服务异常退出,执行docker logs <容器ID>查看具体报错信息。 - 调整RemoteWebDriver初始化时的ChromeOptions配置,新增容器运行必备参数:
ChromeOptions options = new ChromeOptions(); options.addArguments("--no-sandbox"); options.addArguments("--disable-dev-shm-usage"); options.addArguments("--remote-allow-origins=*"); // 使用Chromium镜像时需指定浏览器二进制路径 options.setBinary("/usr/bin/chromium");
4. 最简场景验证
如果分布式部署始终异常,可先通过单机Standalone模式验证环境可用性:
- 执行命令直接启动单机测试环境:
docker run -d -p 4444:4444 --platform linux/arm64 seleniarm/standalone-chromium:latest - 服务启动完成后访问
http://localhost:4444/ui确认控制台可正常打开,再运行测试验证功能,排查是否为分布式部署配置问题。
内容的提问来源于stack exchange,提问作者Dhamo
相关产品推荐
相关产品推荐

