Puppeteer - CentOS7 - 找不到符号

3

嗨,我有一个超级简单的Dockerfile,用于在Docker中运行puppeteer:

FROM node:12.2.0-alpine

RUN apk update && apk upgrade && \
  echo @edge http://nl.alpinelinux.org/alpine/edge/community >> /etc/apk/repositories && \
  echo @edge http://nl.alpinelinux.org/alpine/edge/main >> /etc/apk/repositories && \
  apk add --no-cache \
  bash=4.4.19-r1 \
  git=2.20.1-r0 \
  openssh=7.9_p1-r5 \
  chromium@edge \
  nss@edge \
  freetype@edge \
  harfbuzz@edge \
  ttf-freefont@edge \
  sudo=1.8.25_p1-r2

ADD https://github.com/Yelp/dumb-init/releases/download/v1.2.0/dumb-init_1.2.0_amd64 /usr/local/bin/dumb-init
RUN chmod +x /usr/local/bin/dumb-init
ENTRYPOINT ["dumb-init", "--"]

ENV PUPPETEER_SKIP_CHROMIUM_DOWNLOAD true

WORKDIR /app

COPY package.json .

RUN npm install --quiet -g pm2@^3.5.1 && \
    npm install puppeteer@1.19.0 && \
    npm install --quiet

COPY app.js ./app.js

RUN addgroup -S pptruser && adduser -S -g pptruser pptruser \
  && mkdir -p /home/pptruser/Downloads \
  && chown -R pptruser:pptruser /home/pptruser \
  && chown -R pptruser:pptruser /app

USER pptruser

EXPOSE 1337

CMD [ "pm2-runtime", \
    "start", "app.js", \
    "-i", "max", \
    "--max-memory-restart", "1700M", \
    "--cron", "0 */12 * * *" \
]

这是一个可行的解决方案,直到我在我的CentOS 7主机上运行yum update。之后,应用程序拒绝正常工作,并生成以下错误:

Error: LAUNCH_BROWSER
    at /app/node_modules/async/dist/async.js:171:65
    at processTicksAndRejections (internal/process/task_queues.js:89:5)
Error: Failed to launch chrome!
Error relocating /usr/lib/chromium/chrome: _ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEC1Ev: symbol not found
Error relocating /usr/lib/chromium/chrome: _ZNSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEEC1Ev: symbol not found
Error relocating /usr/lib/chromium/chrome: _ZNSt19_Sp_make_shared_tag5_S_eqERKSt9type_info: symbol not found

到目前为止,我还没有找到将其恢复正常的解决方案:-( 任何建议都将不胜感激。


看起来您缺少一些Debian依赖项: https://github.com/GoogleChrome/puppeteer/blob/master/docs/troubleshooting.md - mahmoudafer
1个回答

3

目前alpine上的最新Chromium版本存在问题。请查看以下两个github问题以获取更多信息:

解决方案

现在的解决方案是将Chromium版本降级到72版。一些用户还报告说73版适合他们。您也可以尝试这个(chromium@edge=73.0.3683.103-r0)。

除了降级Chromium之外,您还需要降级puppeteer到相应的版本。对于Chromium 72,您需要使用版本为1.11.0。(有关如何检测与puppeteer一起使用的Chrome版本的更多信息

Dockerfile已更改:

RUN apk update && apk upgrade && \
  ...
  chromium@edge=72.0.3626.121-r0 \
...

RUN ...
    npm install puppeteer@1.11.0 && \

这似乎不是一个可行的解决方案,因为降级到72...会生成一个与puppeteer相关的不同错误:Error: Protocol error (Fetch.enable): 'Fetch.enable'未找到 在/app/node_modules/puppeteer/lib/Connection.js:183:56 at new Promise (<anonymous>) at CDPSession.send (/app/node_modules/puppeteer/lib/Connection.js:182:12) at NetworkManager._updateProtocolRequestInterception (/app/node_modules/puppeteer/lib/NetworkManager.js:145:22) at NetworkManager.setRequestInterception (/app/node_modules/puppeteer/lib/NetworkManager.js:134:16) at ... - David Zaba
@DavidZaba,你能否尝试将puppeteer降级至v1.11.0版本(在使用Chromium 72时)?那是该版本Chromium所需使用的版本。 - Thomas Dondorf
2
使用v1.11.0可以解决上述错误,但是应用程序仍无法正常工作。我认为这是因为应用程序包含了在> 1.11.0版本中引入的新puppeteer API。这真是太遗憾了,因为我们需要查找如何降级应用程序。希望整个puppeteer能更加稳定。无论如何,我会接受你的答案。 - David Zaba
@DavidZaba 我已经将信息添加到答案中。抱歉,我想这是在错误修复之前最好的选择。 - Thomas Dondorf

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接