You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Alpine Linux Docker容器中ChromeDriver进程提前终止问题求助

问题:Alpine Linux容器中运行ChromeDriver报错:Driver server process died prematurely

本地运行正常的代码

switch (browserName) {
    case "Chrome":
        //System.setProperty("webdriver.chrome.driver", "src/test/resources/drivers/chromedriver.exe");
        *WebDriverManager.chromedriver().setup();*
        ChromeOptions chromeOptions = new ChromeOptions();
        chromeOptions.addArguments("disable-infobars");
        chromeOptions.addArguments("javascript.enabled");
        chromeOptions.addArguments("--remote-allow-origins=*");
        chromeOptions.addArguments("--headless");
        chromeOptions.addArguments("--proxy-server=http://" + proxy);
        driver = new ChromeDriver(chromeOptions);

Docker容器运行时的错误日志

Caused by: org.openqa.selenium.WebDriverException: Driver server process died prematurely.
Build info: version: '4.8.3', revision: 'e5e76298c3'
System info: os.name: 'Linux', os.arch: 'amd64', os.version: '5.10.16.3-microsoft-standard-WSL2', java.version: '17.0.7'
Driver info: driver.version: ChromeDriver
at org.openqa.selenium.remote.service.DriverService.start(DriverService.java:234)
at org.openqa.selenium.remote.service.DriverCommandExecutor.execute(DriverCommandExecutor.java:114)
at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:543)
... 59 more

使用的依赖版本

<selenium-java>4.8.3</selenium-java>
<webdrivermanager>5.3.2</webdrivermanager>
<maven-assembly-plugin>3.6.0</maven-assembly-plugin>
<testng>7.5</testng>
<maven-resources-plugin>3.3.0</maven-resources-plugin>
<mssql-jdbc>11.2.1.jre8</mssql-jdbc>
<log4j-api>2.19.0</log4j-api>
<log4j-core>2.19.0</log4j-core>
<openxml4j>1.0-beta</openxml4j>
<windowsazure-api>0.4.6</windowsazure-api>
<azure-storage>3.1.0</azure-storage>
<azure-keyvault>1.2.6</azure-keyvault>
<adal4j>1.6.7</adal4j>
<json-simple>1.1.1</json-simple>
<json-path>2.7.0</json-path>
<guava>31.0.1-jre</guava>
<cucumber-java>7.11.2</cucumber-java>
<cucumber-testng>7.11.2</cucumber-testng>
<extentreports>5.0.9</extentreports>
<assert4j>3.20.2</assert4j>

解决方案

1. 补充Alpine容器中Chrome运行的依赖

Alpine使用musl libc,而Chrome依赖glibc及其他系统库,需在Dockerfile中安装:

FROM bellsoft/liberica-openjdk-alpine:17.0.7

# 安装Chromium浏览器、驱动及依赖库
RUN apk add --no-cache chromium chromium-chromedriver \
    && apk add --no-cache libstdc++ glib nss freetype harfbuzz ca-certificates ttf-dejavu

# 设置环境变量指定路径
ENV CHROME_BIN=/usr/bin/chromium-browser
ENV CHROME_DRIVER=/usr/bin/chromedriver

2. 修改代码适配容器环境

  • 让WebDriverManager使用系统已安装的chromedriver,避免自动下载适配glibc的版本:
WebDriverManager.chromedriver().useSystemDriver().setup();
  • 补充ChromeOptions的容器适配参数:
ChromeOptions chromeOptions = new ChromeOptions();
chromeOptions.setBinary("/usr/bin/chromium-browser"); // 指定容器中Chrome路径
chromeOptions.addArguments("disable-infobars");
chromeOptions.addArguments("javascript.enabled");
chromeOptions.addArguments("--remote-allow-origins=*");
chromeOptions.addArguments("--headless=new"); // Selenium 4.8+推荐的新无头模式
chromeOptions.addArguments("--proxy-server=http://" + proxy);
// 容器环境必备参数
chromeOptions.addArguments("--no-sandbox"); // 禁用沙箱,容器无法使用沙箱模式
chromeOptions.addArguments("--disable-dev-shm-usage"); // 避免/dev/shm空间不足
chromeOptions.addArguments("--window-size=1920,1080"); // 固定窗口大小防止渲染异常

3. 验证运行权限

运行容器时,确保程序对Chrome和chromedriver有执行权限;若使用非root用户,需提前配置对应权限。

内容的提问来源于stack exchange,提问作者Abdulla Suhail

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 22:05:29