/usr/bin/chromium-browser 调用 puppeteer.launch 时不会出现任何错误

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

我正在使用 Nest.js 开发一个具有生成 PDF 文档功能的项目。我正在使用 puppeteer 库通过 API 生成 PDF https://pptr.dev/api/puppeteer.page.pdf

它可以在本地与 Ubuntu 等 docker 操作系统配合良好。我设置的chromium路径是/usr/bin/chromium-browser。

但是,当我使用 docker OS 作为节点:20.18 部署到生产时,似乎该设置不起作用,因为在日志中发现 /usr/bin/chromium-browser NOENT 错误。

启动puppeteer浏览器的代码:

export class BrowserService implements OnModuleInit, OnModuleDestroy {
    private browser: puppeteerCore.Browser | Browser;

    async onModuleInit() {
        if (this.browser) return;
        const puppeteer = process.env.NODE_ENV === 'local' ? puppeteerFull : puppeteerCore;
        this.browser = await puppeteer.launch({
            executablePath: process.env.NODE_ENV === 'local' ? puppeteer.executablePath() : '/usr/bin/chromium-browser',
            headless: true,
            args: ['--no-sandbox', '--disable-setuid-sandbox'],
        });
    }

    getBrowser() {
        return this.browser;
    }
}

Nest 应用程序服务器日志显示 NOENT 错误,如下所示:

Error: Failed to launch the browser process! spawn /usr/bin/chromium-browser ENOENT
TROUBLESHOOTING: https://github.com/puppeteer/puppeteer/blob/main/docs/troubleshooting.md
at onClose (/usr/src/app/node_modules/puppeteer-core/lib/cjs/puppeteer/node/BrowserRunner.js:299:20)
at ChildProcess.<anonymous> (/usr/src/app/node_modules/puppeteer-core/lib/cjs/puppeteer/node/BrowserRunner.js:293:24)
at ChildProcess.emit (node:events:519:28)
at ChildProcess.emit (node:domain:488:12)
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)
WARN received SIGTERM indicating exit request
INFO waiting for 01-node_00, 02-java_00 to die
WARN stopped: 02-java_00 (exit status 143)
WARN stopped: 01-node_00 (terminated by SIGTERM)

有人知道如何解决这个问题吗?

docker操作系统的差异是我能想到的唯一原因。感谢有人能给我一些指导。

javascript nestjs puppeteer
1个回答
0
投票

我认为可执行文件路径应该根据docker容器内的主机操作系统进行调整。

“/usr/bin/chromium-browser”适用于 Ubuntu 操作系统。

对于node:20.18,它应该是一个alpine操作系统,所以也许你可以尝试将executablePath更改为'/usr/bin/chromium'?

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