You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Docker容器中Node.js运行Puppeteer失败:Chrome未找到求助

解决Docker容器中Puppeteer找不到Chrome的问题

问题根源

你的Dockerfile采用多阶段构建,但最终运行的builder阶段基于env镜像而非deps镜像,导致deps阶段手动安装的Chrome完全没被带到最终容器里。另外,Puppeteer默认会去缓存目录找Chrome,和你手动安装的路径不匹配,这也是报错的核心原因。

修复步骤

  • 调整多阶段构建的继承关系,让builder阶段从deps镜像继承,保留已安装的Chrome和依赖包
  • 添加环境变量指定手动安装的Chrome路径,跳过Puppeteer的缓存目录检查
  • 移除冗余的npx puppeteer browsers install chrome命令(已手动安装Chrome,无需重复下载)

修改后的完整Dockerfile

# Stage 0: 定义环境变量
#######################################
FROM node:18 AS env

ENV NODE_ENV=development
ENV NODE_OPTIONS="--max-old-space-size=2048"
ENV PUPPETEER_SKIP_CHROMIUM_DOWNLOAD="true" 
# 阻止Puppeteer自动下载Chromium
ENV PUPPETEER_EXECUTABLE_PATH="/usr/bin/google-chrome-stable"
# 指定手动安装的Chrome实际路径

# Stage 1: 安装依赖与Chrome
#######################################
FROM env AS deps

WORKDIR /app

# 安装Google Chrome Stable
RUN apt-get update && apt-get install -y wget gnupg curl \
    && 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 \
    --no-install-recommends \
    && rm -rf /var/lib/apt/lists/*

# 复制包管理文件,利用Docker缓存优化
COPY package.json yarn.lock* .yarnrc.yml ./
COPY .yarn/releases ./.yarn/releases

# 安装Node依赖
RUN yarn install

# Stage 2: 构建并运行应用
#######################################
FROM deps AS builder

WORKDIR /app

# 复制项目代码文件
COPY . .

# 构建应用
RUN yarn build

EXPOSE 3000
ENV PORT=3000

CMD ["yarn", "start"]

验证方法

构建镜像并启动容器后,进入bash执行以下命令检查Chrome是否存在:

google-chrome --version

如果能输出Chrome版本号,说明安装成功;此时Puppeteer会通过配置的PUPPETEER_EXECUTABLE_PATH找到Chrome,不会再报版本找不到的错误。

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

火山引擎 最新活动