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




