Docker运行Selenium Chrome驱动报错:Server terminated early with status 127
解决方案
1. 更换基础镜像
selenium/hub仅作为Selenium节点管理服务,本身未预装Chrome浏览器和ChromeDriver,无法直接运行浏览器测试。改用包含Chrome的独立镜像:
FROM selenium/standalone-chrome:nightly
2. 清理权限与冗余命令
基础镜像默认用户seluser已有足够权限,移除所有sudo避免权限冲突,同时合并命令减少镜像层数:
WORKDIR /usr/src/app RUN apt-get update && apt-get install -y curl COPY . /usr/src/app/ RUN curl -fsSL https://deb.nodesource.com/setup_18.x | bash - RUN apt-get install nodejs -y
3. 安装npm依赖
测试运行需要项目依赖包,在Dockerfile中添加安装步骤,同时利用Docker缓存优化构建速度:
# 先复制依赖配置文件,缓存依赖安装层 COPY package*.json ./ RUN npm install # 再复制其余项目文件 COPY . .
4. 修复启动脚本权限
确保start.sh具备可执行权限:
RUN chmod +x ./start.sh
5. 调整Docker运行参数
- 移除
-d后台运行参数,方便实时查看测试日志 - 添加
--shm-size=2g解决Chrome容器运行时共享内存不足问题
修改后的run.sh:
#!/usr/bin/env bash docker build --platform linux/x86_64 -t selenium_automation_tests . docker run --platform linux/x86_64 --shm-size=2g -p 4442-4444:4442-4444 -it selenium_automation_tests
6. 核对测试代码的Selenium配置
确保测试代码适配容器内的Chrome环境:
- 若代码指定了Chrome路径,改为容器内路径
/usr/bin/google-chrome selenium/standalone-chrome已预装对应版本的ChromeDriver,测试代码可直接调用,无需额外配置路径
内容的提问来源于stack exchange,提问作者Darren Gates
相关产品推荐
相关产品推荐

