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

Docker容器内Jenkins构建任务报错Chrome启动崩溃问题求助

Docker环境ChromeDriver启动崩溃(DevToolsActivePort不存在)解决方案

问题根因

你遇到的报错本质是Docker容器默认非特权运行模式下,Chrome内置沙箱机制无法正常初始化,同时Docker默认分配的/dev/shm共享内存容量过小、DevTools动态端口生成失败共同导致的,和Chrome、ChromeDriver版本匹配无关。

核心解决方案

1. Selenium启动Chrome时添加必填参数

你需要在测试代码的ChromeOptions配置中新增三个启动参数,这是Chrome官方给出的Docker环境适配方案:

  • --no-sandbox:关闭Chrome沙箱校验,适配容器非特权运行环境
  • --disable-dev-shm-usage:禁用/dev/shm临时存储,改用/tmp目录存储临时文件,避免共享内存不足
  • --remote-debugging-port=9222:固定DevTools调试端口,解决端口生成文件找不到的报错

不同开发语言的配置示例如下:

Java示例

import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.chrome.ChromeDriver;

// 初始化配置
ChromeOptions options = new ChromeOptions();
// 新增三个适配参数
options.addArguments("--no-sandbox");
options.addArguments("--disable-dev-shm-usage");
options.addArguments("--remote-debugging-port=9222");
// 原有其余配置(如xvfb相关配置)保持不变
WebDriver driver = new ChromeDriver(options);

Node.js WebDriverIO示例

从你给出的日志可以看到你使用了Node.js的webdriver框架,修改capabilities配置即可:

exports.config = {
  // 其余原有配置保持不变
  capabilities: [{
    browserName: 'chrome',
    'goog:chromeOptions': {
      args: [
        // 新增三个适配参数
        '--no-sandbox',
        '--disable-dev-shm-usage',
        '--remote-debugging-port=9222',
        // 原有其余启动参数保持不变
      ]
    }
  }]
}

Python示例

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

chrome_options = Options()
chrome_options.add_argument("--no-sandbox")
chrome_options.add_argument("--disable-dev-shm-usage")
chrome_options.add_argument("--remote-debugging-port=9222")
# 原有其余配置保持不变
driver = webdriver.Chrome(options=chrome_options)

2. 可选:补充Dockerfile依赖

如果添加参数后仍启动失败,可修改Dockerfile补充字体依赖、添加ChromeDriver执行权限,避免因依赖缺失导致崩溃:

FROM jenkins/jenkins:latest
ENV JAVA_OPTS -Djenkins.install.runSetupWizard=false
ENV CASC_JENKINS_CONFIG /var/jenkins_home/casc.yaml
COPY plugins.txt /usr/share/jenkins/ref/plugins.txt
RUN /usr/local/bin/install-plugins.sh < /usr/share/jenkins/ref/plugins.txt
COPY casc.yaml /var/jenkins_home/casc.yaml
USER root
RUN apt-get update && apt-get install wget unzip \
# 新增字体依赖,解决Chrome缺字崩溃问题
&& apt-get install -y nodejs npm fonts-liberation fonts-wqy-zenhei \
# 原有Chrome、ChromeDriver安装步骤,新增执行权限配置
&& wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb \
&& apt-get install -y ./google-chrome-stable_current_amd64.deb \
&& wget https://chromedriver.storage.googleapis.com/93.0.4577.15/chromedriver_linux64.zip \
&& unzip chromedriver_linux64.zip && mv chromedriver /usr/bin/chromedriver \
&& chmod +x /usr/bin/chromedriver
USER jenkins

补充说明

你已配置xvfb无界面运行,不需要额外添加--headless参数,如果后续希望不依赖xvfb运行,可在Chrome启动参数中添加--headless=new即可直接无界面启动Chrome。


内容的提问来源于stack exchange,提问作者Cyprowolf N

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 01:15:04