在Node Dockerfile中运行puppeteer



我有一个Node JS后端,它应该使用puppeteer截图我的pdf。在我的本地系统(MAC OS)上,一切都很好。现在我想将其作为Azure应用程序服务中的docker容器发布。应用程序启动正常,但当我触发puppeteer时,出现以下错误:

错误:无法找到Chromium (rev. 1069273)。这可能发生在

  1. 您没有执行在运行脚本(例如npm install)或
  2. 之前安装。
  3. 缓存路径不正确配置(即:/root/.cache/puppeteer)。对于(2),请查看我们的指南在https://pptr.dev/guides/configuration配置puppeteer .

Dockerfile:

FROM node:slim
ENV PUPPETEER_SKIP_CHROMIUM_DOWNLOAD true
# INSTALL PUPPETEER DEPENDENCIES
RUN apt-get update && apt-get install gnupg wget chromium -y && 
wget --quiet --output-document=- https://dl-ssl.google.com/linux/linux_signing_key.pub | gpg --dearmor > /etc/apt/trusted.gpg.d/google-archive.gpg && 
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 google-chrome-stable -y --no-install-recommends && 
rm -rf /var/lib/apt/lists/*
COPY ./backend/ .
RUN npm install
CMD ["npm", "start"]

路由代码:

import puppeteer from 'puppeteer';
...
const browser = await puppeteer.launch({
headless: true,
ignoreHTTPSErrors: true,
executablePath: '/usr/bin/google-chrome'
})

package.json:

"dependencies": {
...
"puppeteer": "^19.4.1",
}

我的代码遵循以下指南:https://dev.to/cloudx/how-to-use-puppeteer-inside-a-docker-container-568c

我做错了什么?

你可以从Dockerfile中删除关于puppeteer的所有内容,只需添加一个puppeteer.config.cjs文件。

const {join} = require('path');
/**
* @type {import("puppeteer").Configuration}
*/
module.exports = {
// Changes the cache location for Puppeteer.
cacheDirectory: join(__dirname, '.cache', 'puppeteer'),
};

遗憾的是,这会在/root目录中安装puppeteer。如果您想将其移动到另一个目录,请添加

RUN mv /root/.cache /alternate-directory

到你的代码

最新更新