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

Docker环境运行Puppeteer+Jest测试报错求助

Docker环境下Jest+Puppeteer找不到Chrome的排查方案

针对本地运行正常、Docker中globalSetup阶段提示找不到Chrome的问题,按以下顺序排查解决:

1. 补全Docker镜像的Chrome系统依赖

大多数轻量Node镜像(如alpine、slim)缺少Chromium运行必需的系统库,直接运行Puppeteer会失败。

  • 解决方式:
    使用Debian系基础镜像手动安装依赖,或直接采用Puppeteer官方镜像puppeteer/puppeteer:
    FROM node:18-bullseye-slim
    
    # 安装Chromium及依赖库
    RUN apt-get update && apt-get install -y --no-install-recommends \
        chromium \
        libnss3 \
        libatk-bridge2.0-0 \
        libdrm-dev \
        libxkbcommon-dev \
        libgbm-dev \
        libasound-dev \
        libatspi2.0-0 \
        libxshmfence-dev \
        && rm -rf /var/lib/apt/lists/*
    

2. 确保Puppeteer正确下载对应Chromium版本

Docker环境中npm安装时,可能因网络/权限问题跳过Chromium下载,导致版本不匹配。

  • 解决方式:
    • 安装阶段强制开启Chromium下载:
      ENV PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=false
      RUN npm ci --only=production
      
    • 或直接使用系统预装的Chrome,在jest-puppeteer.config.js中指定路径:
      module.exports = {
        launch: {
          executablePath: '/usr/bin/chromium', // 对应Docker内Chrome的实际路径
          args: ['--no-sandbox', '--disable-setuid-sandbox'] // Docker环境必须添加的参数
        }
      }
      

3. 检查globalSetup的Chrome路径配置

如果globalSetup文件硬编码了本地Chrome路径,或未正确读取Puppeteer自带的Chromium路径,会导致找不到浏览器。

  • 解决方式:
    在globalSetup中使用Puppeteer内置的路径:
    const puppeteer = require('puppeteer');
    
    module.exports = async () => {
      global.__BROWSER__ = await puppeteer.launch({
        executablePath: puppeteer.executablePath(),
        args: ['--no-sandbox', '--disable-setuid-sandbox']
      });
    };
    
    同时确认jest.config.js中globalSetup的路径正确:
    module.exports = {
      globalSetup: './jest.global-setup.js',
      preset: 'jest-puppeteer'
    };
    

4. 处理Docker容器的权限问题

非root用户运行容器时,可能没有访问Chrome的权限,或Chrome沙箱机制无法正常工作。

  • 解决方式:
    • 启动容器时添加--user root参数,或在Dockerfile中指定root用户:
      USER root
      
    • 必须给Chrome添加--no-sandbox和--disable-setuid-sandbox启动参数(如上述配置所示)。

5. 校验依赖版本兼容性

Puppeteer、Jest、jest-puppeteer版本不兼容会导致Chromium版本不匹配,引发找不到浏览器的错误。

  • 解决方式:
    使用以下兼容版本组合参考:
    {
      "devDependencies": {
        "jest": "^29.7.0",
        "jest-puppeteer": "^9.0.2",
        "puppeteer": "^21.5.2"
      }
    }
    
    删除node_modules和package-lock.json后重新安装依赖,再构建Docker镜像。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 18:27:29