如何在Docker节点:20-alpine中使用puppeteer

问题描述 投票:0回答:1

我最近一直在尝试在我的 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 容器。我只是在这里贪心,但我已经为此浪费了很长时间。我迫切需要一个解决方案

docker dockerfile puppeteer
1个回答
0
投票

我遇到了同样的问题,我无法让 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 容器中运行良好

© www.soinside.com 2019 - 2024. All rights reserved.