Nodejs 在 Docker 中启动 puppeteer 服务很慢
Nodejs 在 Docker 中启动 puppeteer 服务很慢
RT ,docker 中启动 puppeteer 服务需要至少 10 分钟以上,导致服务启动失败, 经过排查确认具体耗时是在 「 const browser = await puppeteer.launch({args: config.puppeteerArgs});」这行代码,请问有人遇到过类似问题么
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容器中的环境配置不当导致的。以下是一些可能的解决方案:
-
预下载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路径。 -
优化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"]
-
增加资源分配: 确保Docker容器有足够的CPU和内存资源。可以通过Docker运行命令中的
--cpus
和-m
参数来分配资源。 -
使用缓存: 确保Docker构建过程中使用缓存来减少构建时间。
通过上述方法,你应该能够显著提高在Docker中启动Node.js和Puppeteer服务的速度。