Nodejs 在 Docker 中启动 puppeteer 服务很慢

发布于 1周前 作者 wuwangju 来自 nodejs/Nestjs

Nodejs 在 Docker 中启动 puppeteer 服务很慢

RT ,docker 中启动 puppeteer 服务需要至少 10 分钟以上,导致服务启动失败, 经过排查确认具体耗时是在 「 const browser = await puppeteer.launch({args: config.puppeteerArgs});」这行代码,请问有人遇到过类似问题么

9 回复

docker 里是不是没装 chrome ?如果在 PATH 里没找到的话 puppeteer 会在第一次运行的时候自己下载 但 docker 又不保存数据所以每次启动都是第一次🤣


docker 里装上 Chromium (或者把 puppeteer 下载路径持久化一下)

话说 chromium 不是装依赖的时候下载的嘛,怎么楼上说是因为下载 chromium 会影响启动时间嘞?这个是可选的?

我用这个镜像 buildkite/puppeteer:5.2.1 已经过生产环境验证可用

cpu limit 太低?

docker 环境的话,最佳做法难道不是再搭一个 browserless/chrome ,然后装 puppeteer-core 连过去就行

安装了, 在 cnpm install 的时候就下载并且安装好了

请教一下怎么持久化。。

在Docker中启动Node.js应用并使用Puppeteer时,可能会遇到启动慢的问题。这通常是由于Puppeteer需要下载Chromium浏览器,或者Docker容器中的环境配置不当导致的。以下是一些可能的解决方案:

  1. 预下载Chromium: 你可以在运行Puppeteer之前预下载Chromium,以避免每次启动都下载。可以通过运行以下代码来手动下载:

    const puppeteer = require('puppeteer');
    
    (async () => {
      const browser = await puppeteer.launch({ executablePath: 'path/to/chromium' });
      const page = await browser.newPage();
      await page.goto('https://example.com');
      await browser.close();
    })();
    

    executablePath设置为预下载的Chromium路径。

  2. 优化Docker镜像: 确保你的Docker镜像基于一个轻量级的Node.js基础镜像,并且安装了所有必要的依赖项。使用多阶段构建来减小镜像大小,例如:

    FROM node:alpine AS builder
    WORKDIR /app
    COPY . .
    RUN npm install
    
    FROM node:alpine
    WORKDIR /app
    COPY --from=builder /app/node_modules ./node_modules
    COPY --from=builder /app/package*.json ./
    EXPOSE 3000
    CMD ["node", "your-script.js"]
    
  3. 增加资源分配: 确保Docker容器有足够的CPU和内存资源。可以通过Docker运行命令中的--cpus-m参数来分配资源。

  4. 使用缓存: 确保Docker构建过程中使用缓存来减少构建时间。

通过上述方法,你应该能够显著提高在Docker中启动Node.js和Puppeteer服务的速度。

回到顶部