我有一个Node JS后端,它应该使用puppeteer截图我的pdf。在我的本地系统(MAC OS)上,一切都很好。现在我想将其作为Azure应用程序服务中的docker容器发布。应用程序启动正常,但当我触发puppeteer时,出现以下错误:
错误:无法找到Chromium (rev. 1069273)。这可能发生在
- 您没有执行在运行脚本(例如
之前安装。npm install
)或- 缓存路径不正确配置(即:/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
到你的代码