Puppeteer 错误:加载共享库时出错:libgobject-2.0.so.0

2024-02-25

我在 Google Cloud Run 上部署了一个 NestJS 应用程序,它使用 puppeteer (V7.0.1) 生成 PDF。在本地,一切都工作得很好,但在我的 Cloud Run Service 上,我不断收到以下错误:/usr/app/node_modules/puppeteer/.local-chromium/linux-848005/chrome-linux/chrome: error while loading shared libraries: libgobject-2.0.so.0: cannot open shared object file: No such file or directory

该目录确实存在于 Docker 容器中(通过检查RUN ls node_modules/.....)。 使用 Docker 代码puppeteer 故障排除文档 https://github.com/puppeteer/puppeteer/blob/main/docs/troubleshooting.md或我在网络上发现的类似问题上发现的任何其他片段都会给我带来同样的错误。

Dockerfile:

FROM node:12-slim AS base
WORKDIR /usr/app

FROM base AS build
RUN apt-get update \
    && apt-get install -y wget gnupg \
    && wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add - \
    && 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 -y google-chrome-stable fonts-ipafont-gothic fonts-wqy-zenhei fonts-thai-tlwg fonts-kacst fonts-freefont-ttf libxss1 \
      --no-install-recommends \
    && rm -rf /var/lib/apt/lists/*

COPY package.json yarn.lock ./
RUN yarn --prod
COPY . ./
RUN yarn add @nestjs/cli
RUN yarn sass && yarn build && yarn copy-pdf-assets

FROM base
COPY --from=build /usr/app ./
ENV PATH /usr/app/node_modules/.bin:$PATH
CMD yarn start:prod

生成PDF功能:

//also tried headless: true or false and many other flags that deemed to fix it for others
const browser = await puppeteer.launch({ args: ['--no-sandbox'] }); 

try {
    const page = await browser.newPage();

    await page.setViewport({ height: 792, width: 1039 })
    await page.setContent(this.getTemplate(template, data), {
        waitUntil: ['load', 'domcontentloaded', 'networkidle0']
    });
    await page.addStyleTag({ path: this.resolvePath(`/templates/${template}/styles.css`) })

    await new Promise(resolve => setTimeout(resolve, 500));

    return await page.pdf({ format: 'a4', landscape: true, printBackground: true });
} finally {
    await browser.close();
}

如果您需要任何其他信息,请告诉我。 提前致谢。


对于任何阅读本文并遇到类似问题和设置的人:我的错误是我的 docker 文件中的构建步骤。由于我在那里安装了 chromium,而不是实际的运行步骤,puppeteer 在运行时实际上没有 chromium 实例。我刚刚将 apt-get 内容移至 docker 文件的最后一步,修复了该问题。

2023年5月23日编辑:

上述 dockerfile 的工作版本:

FROM node:12-slim AS base
WORKDIR /usr/app

FROM base AS build
COPY package.json yarn.lock ./
RUN yarn --prod
COPY . ./
RUN yarn add @nestjs/cli
RUN yarn sass && yarn build && yarn copy-pdf-assets

FROM base
RUN apt-get update \
    && apt-get install -y wget gnupg \
    && wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add - \
    && 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 -y google-chrome-stable fonts-ipafont-gothic fonts-wqy-zenhei fonts-thai-tlwg fonts-kacst fonts-freefont-ttf libxss1 \
      --no-install-recommends \
    && rm -rf /var/lib/apt/lists/*
COPY --from=build /usr/app ./
ENV PATH /usr/app/node_modules/.bin:$PATH
CMD yarn start:prod
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Puppeteer 错误:加载共享库时出错:libgobject-2.0.so.0 的相关文章

随机推荐

  • 列表等数据结构类型的 Sphinx 文档字符串标准是什么?

    Sphinx 是否有支持的标准来记录不是简单的单个对象的参数或返回值类型 例如 在下面的例子中 arg1 是一个 str arg2 是一个 str 列表 arg3 是一个 str 或 int 如何在 Sphinx 中指定集合或复合类型 或者
  • 绘图中两个 y 轴的一条零线

    该图是使用以下代码生成的 library tidyverse library plotly df lt data frame DEP c ABC DEF GHI VALUE c 100 110 120 LINE c 0 1 0 7 0 9
  • 显示多种形式

    在我的代码中 我有一个主窗体 名为 frmMain 和一个关于框 名为 AboutBox1 我想要发生的是 当用户单击菜单条中的 帮助 菜单 然后单击 关于 时 我希望显示 AboutBox1 表单 我已经研究了如何做到这一点 但是当我尝试
  • PhpStorm 和扩展的 php 定义

    使用代码提示 PHPStorm 可以快速显示函数定义 可以配置它来向我展示该函数使用的更详细示例吗 You can place the cursor text cursor not mouse cursor on any PHP funct
  • 打破嵌套循环[重复]

    这个问题在这里已经有答案了 我的嵌套循环有问题 我有多个帖子 每个帖子都有多个图像 我想从所有帖子中获取总共 5 张图片 所以我使用嵌套循环来获取图像 并希望在数量达到 5 时中断循环 以下代码将返回图像 但似乎不会中断循环 foreach
  • 为什么 R 中的循环很慢?

    我知道循环很慢R我应该尝试以矢量化的方式做事 但为什么 为什么循环很慢并且apply快吗 apply调用几个子函数 这看起来并不快 Update 抱歉 这个问题问得不好 我将矢量化与apply 我的问题应该是 为什么矢量化速度更快 循环并不
  • 获取 Jekyll 中两个日期之间的天数差异

    我想知道杰基尔两个日期之间的天数差异 我怎样才能实现这个目标 capture currentDate site time date Y m d endcapture currentDate capture event date entry
  • 在 Go 中测试空字符串的最佳方法是什么?

    哪种方法最适合测试非空字符串 在 Go 中 if len mystring gt 0 Or if mystring 或者是其他东西 这两种样式都在 Go 的标准库中使用 if len s gt 0 可以在strconv包裹 http gol
  • 如何在CSS中使进度条的角变圆

    对于我的进度条 我希望边缘变圆并在进度条内显示百分比 我设法使进度值的角变圆 但不使条 背景变圆 而且动画似乎也不起作用 css progress bar body font family Helvetica Neue arial sans
  • 如何用c++建立简单的ssh连接

    我正在尝试制作一个 C 程序 它将连接到 ssh 服务器 我的笔记本电脑 服务器没问题 因为我可以通过 putty 连接 虽然我目前写的程序还不能 在我的代码中 我使用库 libssh h 并使用 Visual Studio 2015 进行
  • 使图片元素中的图像适合其容器

    我有以下代码 container background steelblue width 333px height 333px picture img object fit cover div div
  • 按日期显示 MySQL 结果

    我有这个 mysql 表 date query count 2012 11 18 09 52 00 Michael 1 2012 11 18 10 47 10 Tom 2 2012 11 17 15 02 12 John 1 2012 11
  • 使用 Gradle 从单个源项目编译多个 jar

    我正在使用 Gradle 构建一个用于 Spark 应用程序的库 此类库通常以 Scala 版本和 Spark 版本的多种组合形式提供 例如 对于火花测试基地 https github com holdenk spark testing b
  • Python3 中使用 strtobool 的 Yes/No 提示

    我一直在尝试为将在命令行上运行的脚本编写一个优雅的 y n 提示 我遇到过这个 http mattoc com python yes no prompt cli html http mattoc com python yes no prom
  • URLDownloadToFile - 下载文件中缺少数据

    Using URLDownloadToFile在 VBA 中 我正在尝试下载一个文件 问题是正在下载一个空白文件 知道为什么数据丢失吗 Option Explicit Private Declare Function URLDownload
  • LINQ to Entities 无法识别方法

    我有一个很长的 Linq To Entities 查询 reports db CallProfileDailies Join db ReportDailyTotals cpd gt cpd Date rdt gt rdt Date cpd
  • 如何匹配由连字符和空格等特殊字符组成的字符串

    我有一个字符串 word A Scan Ultrasonic 如何将其与 A Scan Ultrasonic 我试过我的运气 word regex A Scan Ultrasonic options i 但这并没有得到任何结果 我可以知道如
  • 如何在 RichFaces 4 fileUpload 组件中显示有关最大文件大小限制的消息

    我已经使用 RichFaces 4 3 实现了文件上传 文件上传工作正常 有关文件类型的警报工作正常 但有关最大文件大小限制的警报则不然 文件上传代码
  • g++ 以 UTF-16 编码编译源代码

    g 不编译我的 UTF 16 编码的源文件 是否可以这样做或者我应该使用 UTF 8 编码 None
  • Puppeteer 错误:加载共享库时出错:libgobject-2.0.so.0

    我在 Google Cloud Run 上部署了一个 NestJS 应用程序 它使用 puppeteer V7 0 1 生成 PDF 在本地 一切都工作得很好 但在我的 Cloud Run Service 上 我不断收到以下错误 usr a