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

Nest.js部署时调用puppeteer.launch出现/usr/bin/chromium-browser NOENT错误

解决思路

1. 检查并安装生产环境镜像中的Chromium

node:20.18基础镜像基于Debian,默认未预装Chromium,且Debian中Chromium的默认路径是/usr/bin/chromium(而非Ubuntu的/usr/bin/chromium-browser)。需在Dockerfile中添加安装步骤:

# 在安装npm依赖前添加以下命令
RUN apt-get update && apt-get install -y --no-install-recommends chromium \
    && rm -rf /var/lib/apt/lists/*

安装完成后,修改代码中的executablePath为/usr/bin/chromium:

executablePath: process.env.NODE_ENV === 'local' ? puppeteer.executablePath() : '/usr/bin/chromium',

2. 改用puppeteer自动管理浏览器(推荐)

放弃手动指定浏览器路径,直接使用完整的puppeteer包(而非puppeteer-core),它会自动下载与当前版本兼容的Chromium,无需手动安装。

  • 调整依赖:确保生产环境安装puppeteer而非puppeteer-core
  • 修改代码,移除硬编码的executablePath:
async onModuleInit() {
    if (this.browser) return;
    // 统一使用puppeteer,无需区分环境
    const puppeteer = await import('puppeteer');
    this.browser = await puppeteer.launch({
        headless: true,
        args: ['--no-sandbox', '--disable-setuid-sandbox'],
    });
}

同时,Dockerfile需安装puppeteer运行所需的系统依赖:

RUN apt-get update && apt-get install -y --no-install-recommends \
    libnss3 libatk1.0-0 libatk-bridge2.0-0 libcups2 libdrm2 \
    libxkbcommon0 libxcomposite1 libxdamage1 libxfixes3 libxrandr2 \
    libgbm1 libasound2 \
    && rm -rf /var/lib/apt/lists/*

3. 使用预配置的Puppeteer官方镜像

直接基于官方提供的包含Node.js和Chromium的镜像构建项目,避免手动安装依赖的麻烦:

FROM ghcr.io/puppeteer/puppeteer:20.18.0

# 设置工作目录
WORKDIR /usr/src/app

# 复制package文件并安装依赖
COPY package*.json ./
RUN npm install

# 复制项目代码
COPY . .

# 启动应用
CMD ["npm", "run", "start:prod"]

此时代码中无需指定executablePath,puppeteer.executablePath()会自动获取正确路径。

4. 验证路径与执行权限

若仍存在问题,可进入生产容器手动验证:

  • 执行which chromium确认浏览器实际路径
  • 执行ls -l /usr/bin/chromium确认文件存在且有执行权限

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 03:46:10