Как запустить кукловод NodeJS с Chromium v77 в Docker? - PullRequest
0 голосов
/ 13 октября 2019

Alpine поддерживает Chromium v77 в 8 октября.

Ссылка: https://pkgs.alpinelinux.org/packages?name=chromium&branch=edge

Попытка скопировать шаги для загрузки Chromium v77 и запуска Puppeteer v1.20, но с ошибкой при запуске:

Error for printPdf()
{}
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: hb_subset_input_set_retain_gids: symbol not found
Error relocating /usr/lib/chromium/chrome: _ZNSt19_Sp_make_shared_tag5_S_eqERKSt9type_info: symbol not found


TROUBLESHOOTING: https://github.com/GoogleChrome/puppeteer/blob/master/docs/troubleshooting.md

    at onClose (/usr/src/app/node_modules/puppeteer/lib/Launcher.js:348:14)
    at Interface.<anonymous> (/usr/src/app/node_modules/puppeteer/lib/Launcher.js:337:50)
    at Interface.emit (events.js:214:15)
    at Interface.close (readline.js:403:8)
    at Socket.onend (readline.js:180:10)
    at Socket.emit (events.js:214:15)
    at endReadableNT (_stream_readable.js:1178:12)
    at processTicksAndRejections (internal/process/task_queues.js:77:11)

Dockerfile:

FROM node:12-alpine

ENV CHROME_BIN="/usr/bin/chromium-browser"\
    PUPPETEER_SKIP_CHROMIUM_DOWNLOAD="true"

RUN set -x \
    && apk update \
    && apk upgrade \
    && echo "127.0.0.1 localhost" >> /etc/hosts \
    && echo "http://dl-cdn.alpinelinux.org/alpine/edge/testing" > /etc/apk/repositories \
    && echo "http://dl-cdn.alpinelinux.org/alpine/edge/community" >> /etc/apk/repositories \
    && echo "http://dl-cdn.alpinelinux.org/alpine/edge/main" >> /etc/apk/repositories \
    && apk add --no-cache g++ chromium \
    && npm install puppeteer@1.20.0 puppeteer-core@1.20.0 
    ...

1 Ответ

1 голос
/ 13 октября 2019

Я думаю, что проблема связана с вашей установкой. Вы можете попробовать это как базовый образ.

FROM zenika/alpine-chrome:77-with-node
ENV PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true
RUN npm install puppeteer@1.20.0 puppeteer-core@1.20.0 
COPY my_script.js /usr/src/app/
CMD ["node","my_script.js"]

my_script.js код тестирования

const puppeteer = require('puppeteer');

(async () => {
  const browser =await puppeteer.launch({
  executablePath: '/usr/bin/chromium-browser',
  args: ['--no-sandbox', '--headless', '--disable-gpu']
});
  const page = await browser.newPage();
  await page.goto('https://news.ycombinator.com', {waitUntil: 'networkidle2'});
  await page.pdf({path: 'hn.pdf', format: 'A4'});

  await browser.close();
})();

Если вы хотите собрать из sractch, вы можете использовать этот Dockerfile и измените в соответствии с вашими потребностями.

...