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

Docker中运行Kibana插件功能测试时遭遇WebDriver会话创建失败(用户数据目录冲突)问题排查

Docker中运行Kibana插件功能测试时遭遇WebDriver会话创建失败(用户数据目录冲突)问题排查

问题背景

你在本地开发Kibana插件时,功能测试可以正常运行,但在Docker容器(Jenkins环境)中执行时,遇到了WebDriver会话创建失败的错误,核心报错是:

SessionNotCreatedError: session not created: probably user data directory is already in use, please specify a unique value for --user-data-dir argument, or don't use --user-data-dir

你已经配置了Chrome安装、Kibana和ES的启动等待逻辑,但还是卡在WebDriver会话创建这一步。

原因分析

这个错误本质是Chrome用户数据目录被重复占用:Docker环境下,Chrome默认的用户数据目录可能被复用,或者目录权限不足导致无法创建新会话;另外Docker隔离环境下跑Chrome,还需要处理沙箱限制、共享内存不足等隐性问题,这些都可能间接引发会话创建失败。

解决方案

结合我自己踩过的类似坑,给你整理几个具体的排查和修复方向:

1. 在测试配置文件中指定唯一Chrome用户数据目录

修改你的config.js,给Chrome添加动态生成的唯一用户数据目录参数,彻底避免冲突:

// 先引入path模块处理路径
const path = require('path');

// ... 其他原有配置代码 ...

return {
  // ... 继承的Kibana基础配置 ...
  browser: {
    type: 'chrome',
    args: [
      // Docker环境跑Chrome必须的参数,解决沙箱和内存问题
      '--no-sandbox',
      '--disable-dev-shm-usage',
      '--headless=new', // 使用Chrome最新的headless模式,兼容性更稳定
      // 用时间戳生成唯一的用户数据目录,每次测试都是全新的隔离环境
      `--user-data-dir=${path.join(process.env.TMPDIR || '/tmp', `chrome-test-profile-${Date.now()}`)}`,
    ],
  },
  // ... 其他原有配置 ...
};

2. 优化bash脚本的临时目录与浏览器安装逻辑

在脚本开头先确保临时目录存在且权限正确,避免Chrome无法写入数据:

# 脚本最开头添加:创建并授权临时目录
export TMPDIR=/tmp/kibana-test-tmp
mkdir -p $TMPDIR
chmod 777 $TMPDIR

另外,脚本中安装Chrome的部分,建议直接用puppeteer自带的浏览器管理工具,避免系统安装的Chrome与chromedriver版本不匹配:

# 替换原有Chrome安装代码
cd plugins/my-plugin
# 安装puppeteer并自动下载对应版本的Chrome
yarn add puppeteer
# 获取Chrome二进制文件路径
TEST_BROWSER_BINARY_PATH=$(npx puppeteer browsers path chrome)
cd -

3. 移除脚本中的sudo操作,提前在Dockerfile中安装依赖

Docker容器中尽量避免在脚本中用sudo安装依赖,建议把default-jre、chromium-chromedriver等依赖直接写到Dockerfile里,比如:

# Dockerfile中添加:
RUN apt-get update && apt-get install -y --no-install-recommends \
    default-jre \
    chromium-chromedriver \
    && rm -rf /var/lib/apt/lists/*

4. 完善ES与Kibana的启动等待逻辑

当前脚本只等待Kibana启动,但功能测试依赖ES的就绪状态,建议添加ES的健康检查:

# 启动ES后等待其就绪
yarn es snapshot &
# 等待ES集群状态变为green或yellow
while ! curl -s http://localhost:9200/_cluster/health | grep -q '"status":"green"\|"status":"yellow"'; do
  echo "Waiting for Elasticsearch to be ready..."
  sleep 10
done

# 原有Kibana启动与等待逻辑保持不变
(NODE_OPTIONS="--max-old-space-size=4096" yarn start --no-base-path >startup.log &) && \
while ! grep -q "Kibana is now available" "startup.log"; do
  echo "Pattern not found, checking again..."
  tail startup.log
  sleep 10
done

验证修改

把以上调整应用后,重新在Docker容器中执行测试脚本,应该可以成功创建WebDriver会话,顺利运行Kibana插件的功能测试。

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.08 10:04:36