我最近一直在尝试在我的 docker 中使用 puppeteer,但收到此错误,提示无法启动进程。我尝试将图像更改为 node:20-slim 和一些附加包,但我仍然能够看到这一点。请帮帮我。
Error: Failed to launch the browser process! spawn /usr/src/apigateway/.cache/puppeteer/chrome/linux-121.0.6167.85/chrome-linux64/chrome ENOENT
TROUBLESHOOTING: https://pptr.dev/troubleshooting
at ChildProcess.onClose (/usr/src/apigateway/node_modules/@puppeteer/browsers/lib/cjs/launch.js:267:24)
at ChildProcess.emit (node:events:518:28)
at ChildProcess._handle.onexit (node:internal/child_process:292:12)
at onErrorNT (node:internal/child_process:484:16)
at process.processTicksAndRejections (node:internal/process/task_queues:82:21)
看看我的 Dockerfile
FROM node:20-alpine
RUN apk add --no-cache \
udev \
ttf-freefont \
chromium \
nss \
freetype \
freetype-dev \
harfbuzz \
ca-certificates \
fontconfig \
curl
# Create app directory
RUN mkdir -p /usr/src/apigateway
WORKDIR /usr/src/apigateway
# Bundle app source
COPY . /usr/src/apigateway
# Install app dependencies
RUN npm install
EXPOSE 1337
CMD [ "node", "server.js"]
一个工作的 docker 容器。我只是在这里贪心,但我已经为此浪费了很长时间。我迫切需要一个解决方案
我遇到了同样的问题,我无法让 Puppeteer 在 AWS EC2 服务器上的 docker 容器中工作,但我仍然成功了。问题不仅在于配置的 Dockerfile,还在于 Puppeteer 的配置。 就我而言,我需要将 "node-html-to-image": "^4.0.0" 库与 Nest.js 框架一起使用,该框架也在幕后使用 Puppeteer。
我的 Dockerfile 示例:
### Base
FROM node:20-alpine as base
ENV NODE_ENV=some_env
# Install necessary packages for Puppeteer
# Installs latest Chromium (100) package.
RUN apk add --no-cache \
udev \
ttf-freefont \
chromium
ENV PUPPETEER_EXECUTABLE_PATH=/usr/bin/chromium-browser
USER username
WORKDIR /your_work_dir
# Copy base dependencies describing
# COPY ...
RUN npm install
### Builder
FROM base as builder
RUN npm install
RUN npm run build
### Runtime
FROM node:20-alpine as runtime
ENV NODE_ENV=some_env
WORKDIR /your_work_dir
# Install necessary packages for Puppeteer in runtime image
RUN apk add --no-cache \
udev \
ttf-freefont \
chromium
ENV PUPPETEER_EXECUTABLE_PATH=/usr/bin/chromium-browser
# Copy runtime dependencies
# COPY ...
CMD ["npm", "run", "start:prod"]
库的具体配置:
import nodeHtmlToImage from 'node-html-to-image';
//CONFIGURATION FOR SERVER USE ONLY
const buffer = nodeHtmlToImage({
puppeteerArgs: {
headless: 'new',
executablePath: '/usr/bin/chromium-browser',
ignoreHTTPSErrors: true,
args: ['--no-sandbox', '--disable-gpu', '--disable-setuid-sandbox'],
},
html: base64Image, //html string in utf-8 format
type: 'png',
})) as Buffer
//CONFIGURATION FOR LOCAL USE ONLY
const buffer = nodeHtmlToImage({
puppeteerArgs: {
headless: 'new',
defaultViewport: {
width: 1200,
height: 1080,
},
},
html: base64Image, //html string in utf-8 format
type: 'png',
})) as Buffer
//Do anything with the buffer
我的本地计算机上安装了 ubuntu 22.04 发行版。
因此,这种方法在 docker 容器中运行良好