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

Docker中Puppeteer+Codeceptjs测试报错:找不到浏览器版本756035

解决Docker中Codeceptjs+Puppeteer的浏览器版本匹配问题

问题根源

你遇到的错误核心是Puppeteer版本与Docker内安装的Chrome Stable版本不匹配。Puppeteer的每个版本都绑定了特定的Chromium修订版本(这里是756035),你虽然通过apt安装了Chrome Stable,但Puppeteer默认会优先寻找它绑定的那个特定Chromium版本;再加上你设置PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true跳过了绑定版本的下载,自然就出现了找不到文件的报错。另外,即使安装了系统Chrome,你也没明确告诉Puppeteer去使用它,这也是问题之一。

修复步骤

1. 调整Dockerfile的环境变量与依赖安装顺序

你的PUPPETEER_SKIP_CHROMIUM_DOWNLOAD环境变量放在了安装Puppeteer之后,这会导致安装时仍会尝试下载Chromium。同时,Docker容器运行Chrome还需要一些额外的系统依赖库,我已经帮你补充进去了:

# Use whatever version you are running locally (see node -v)
FROM node:12.18
WORKDIR /app

# 先设置环境变量,提前告知Puppeteer跳过Chromium下载
ENV PUPPETEER_SKIP_CHROMIUM_DOWNLOAD true

# 安装系统依赖、Chrome Stable及工具脚本
RUN apt-get update \
 && apt-get install -y wget gnupg ca-certificates libxss1 libnss3 libasound2 libatk-bridge2.0-0 libgtk-3-0 \
 && wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add - \
 && sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list' \
 && apt-get update \
 && apt-get install -y google-chrome-stable \
 && rm -rf /var/lib/apt/lists/* \
 && wget --quiet https://raw.githubusercontent.com/vishnubob/wait-for-it/master/wait-for-it.sh -O /usr/sbin/wait-for-it.sh \
 && chmod +x /usr/sbin/wait-for-it.sh

# 安装项目基础依赖
COPY package.json package-lock.json ./
RUN npm install

# 安装Codeceptjs和Puppeteer(此时会遵守跳过Chromium下载的设置)
RUN npm install codeceptjs puppeteer

COPY . /app

# 执行测试用例
RUN npx codeceptjs run

2. 修改Codeceptjs配置,指定系统Chrome路径

在你的codecept.conf.js(或codecept.json)中,给Puppeteer配置项添加executablePath和Docker运行必需的启动参数:

exports.config = {
  // 其他原有配置...
  helpers: {
    Puppeteer: {
      url: "你的测试目标URL",
      show: false,
      executablePath: '/usr/bin/google-chrome-stable', // 关键:指定系统安装的Chrome路径
      args: ['--no-sandbox', '--disable-setuid-sandbox', '--disable-dev-shm-usage'] // Docker无沙箱环境的必需参数
    }
  },
  // 其他原有配置...
};

这些启动参数是为了让Chrome在Docker的受限环境中正常运行,避免权限和资源不足的问题。

3. 可选:锁定Puppeteer版本匹配Chrome版本

如果你更倾向于让Puppeteer绑定的Chromium版本和系统Chrome完全一致,可以先查清楚安装的Chrome Stable版本,再安装对应版本的Puppeteer。比如Chrome 84对应Puppeteer 5.3.0,你可以在package.json中明确指定:

{
  "dependencies": {
    "codeceptjs": "^2.6.0",
    "puppeteer": "5.3.0"
  }
}

这种方式需要你手动维护版本对应关系,不如直接使用系统Chrome灵活,但能避免版本兼容问题。

验证修复

重新构建镜像并运行容器即可:

docker build -t codecept-puppeteer-test .
docker run codecept-puppeteer-test

此时Puppeteer会调用你安装的Chrome Stable,不会再出现找不到指定浏览器修订版本的报错。

内容的提问来源于stack exchange,提问作者Jananath Banuka

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:36:47