Я пытаюсь запустить пользовательскую команду узла из док-контейнера Alpine Linux.

Установленные пакеты:

alpine-baselayout alpine-keys libressl2.4-libcrypto libressl2.4-libssl apk-tools scanelf libc-utils glibc libgcc glibc-bin libbz2 expat libffi gdbm xz-libs ncurses-terminfo-base ncurses-terminfo ncurses-libs readline sqlite-libs musl zlib libpng freetype pkgconf zlib-dev libpng-dev freetype-dev libstdc   binutils-libs binutils gmp isl libgomp libatomic mpfr3 mpc1 gcc musl-dev libc-dev g   ca-certificates libssh2 libcurl pcre git libjpeg-turbo libjpeg-turbo-dev tiff tiff-dev lcms2 lcms2-dev musl-utils libffi-dev libressl libressl2.4-libtls libressl-dev make db libsasl libldap libpq postgresql-libs postgresql-dev python2 py-setuptools python3 python3-dev libxau libbsd libxdmcp libxcb libx11 gifsicle pngquant optipng libjpeg-turbo-utils busybox udev-init-scripts eudev-libs libuuid libblkid kmod eudev fontconfig libfontenc mkfontscale mkfontdir ttf-opensans libogg flac libxcomposite libxfixes libxrender libxcursor libxdamage libxext libxi libxrandr libxscrnsaver libxtst alsa-lib libintl libmount glib atk pixman cairo dbus-libs avahi-libs nettle libtasn1 p11-kit libunistring gnutls cups-libs libxml2 shared-mime-info hicolor-icon-theme gdk-pixbuf gtk-update-icon-cache libxinerama at-spi2-core at-spi2-atk cairo-gobject libepoxy graphite2 harfbuzz libxft pango gtk 3.0 minizip nspr nss snappy libwebp libgpg-error libgcrypt libxslt chromium .build-deps libwebp-dev c-ares libcrypto1.0 http-parser libssl1.0 libuv nodejs nodejs-npm libidl orbit2 dbus-glib polkit gconf 

пакеты узлов ( npm list --depth=0 ):

 node-pdf-renderer@0.0.1 /var/www/my_proj/idf/static/js └── puppeteer@0.12.0 

но я испытываю некоторые ошибки:

 /var/www/my_proj/idf/static/js # node render.js uid=uid-param url=https://www.targethost.example token=tk-param out=/tmp/test.pdf (node:167) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): Error: Failed to launch chrome! /var/www/my_proj/idf/static/js/node_modules/puppeteer/.local-chromium/linux-508693/chrome-linux/chrome: /usr/lib/libasound.so.2: no version information available (required by /var/www/my_proj/idf/static/js/node_modules/puppeteer/.local-chromium/linux-508693/chrome-linux/chrome) TROUBLESHOOTING: https://github.com/GoogleChrome/puppeteer/blob/master/docs/troubleshooting.md (node:167) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code. 

кажется, что не в состоянии создать экземпляр хрома. Я также попытался изменить скрипт render.js, пока он создает экземпляр браузера:

 const browser = await puppeteer.launch({ args: ['--no-sandbox'], headless: false }); 

но я получил тот же результат. Любая помощь в этом?

Это сработало для меня

Используйте Puppeteer v0.13.0 . На момент написания этого комментария последняя версия Puppeteer не совместима с хромом в Alpine linux.

PUPPETEER_SKIP_CHROMIUM_DOWNLOAD="true" пропустит загрузку версии Chromium по умолчанию при установке Puppeteer.

Dockerfile:

 FROM node:11-alpine ENV CHROME_BIN="/usr/bin/chromium-browser" PUPPETEER_SKIP_CHROMIUM_DOWNLOAD="true" RUN set -x  {amp}amp;{amp}amp; apk update  {amp}amp;{amp}amp; apk upgrade  # replacing default repositories with edge ones {amp}amp;{amp}amp; echo "http://dl-cdn.alpinelinux.org/alpine/edge/testing" {amp}gt; /etc/apk/repositories  {amp}amp;{amp}amp; echo "http://dl-cdn.alpinelinux.org/alpine/edge/community" {amp}gt;{amp}gt; /etc/apk/repositories  {amp}amp;{amp}amp; echo "http://dl-cdn.alpinelinux.org/alpine/edge/main" {amp}gt;{amp}gt; /etc/apk/repositories   # Add the packages {amp}amp;{amp}amp; apk add --no-cache dumb-init curl make gcc g   python linux-headers binutils-gold gnupg libstdc   nss chromium   {amp}amp;{amp}amp; npm install puppeteer@0.13.0   # Do some cleanup {amp}amp;{amp}amp; apk del --no-cache make gcc g   python binutils-gold gnupg libstdc    {amp}amp;{amp}amp; rm -rf /usr/include  {amp}amp;{amp}amp; rm -rf /var/cache/apk/* /root/.node-gyp /usr/share/man /tmp/*  {amp}amp;{amp}amp; echo ENTRYPOINT ["/usr/bin/dumb-init"] CMD node 

NodeJs:

Вы должны указать Puppeteer использовать установленную версию Chromium, используя следующий конфиг — executablePath: '/usr/bin/chromium-browser'

 const puppeteer = require('puppeteer'); puppeteer .launch({ executablePath: '/usr/bin/chromium-browser', args: ['--no-sandbox', '--disable-dev-shm-usage'], }) .then(async (browser) ={amp}gt; { // your code }); 

Если вы хотите, чтобы кукловод работал на альпийском, попробуйте использовать более старую версию кукловода, которая работает со старой версией Chrome. Последней версией Chrome, поддерживаемой на Alpine, является 63, которая была версией Chrome, использованной при разработке кукловода версии 0.11.0.

 npm install --save puppeteer@0.11.0 

Эту версию Chrome можно найти только на альпийском краю. Вы можете установить его в более старых версиях Alpine, выполнив следующее.

 ENV CHROME_BIN=/usr/bin/chromium-browser RUN echo @edge http://nl.alpinelinux.org/alpine/edge/community {amp}gt;{amp}gt; /etc/apk/repositories {amp}amp;{amp}amp;  echo @edge http://nl.alpinelinux.org/alpine/edge/main {amp}gt;{amp}gt; /etc/apk/repositories {amp}amp;{amp}amp;  apk add --no-cache  chromium@edge  nss@edge 

Убедитесь, что вы начинаете кукловод со следующей конфигурацией

 import puppeteer from 'puppeteer'; const browser = await puppeteer.launch({ executablePath: process.env.CHROME_BIN || null, args: ['--no-sandbox', '--headless', '--disable-gpu'] }); 

Если вам подходит вариант Docker, я настоятельно рекомендую это, так как он избавит вас от многих проблем. Chromium работает на большинстве версий Linux, но для правильной работы необходимо было установить множество пакетов (и после этого все еще есть шрифты, с которыми приходится бороться).

Полное раскрытие: я поддерживаю репозиторий и образ Docker (находится здесь: https://hub.docker.com/r/browserless/chrome/ ). Это идет в ногу с соответствующими версиями кукловода, так что есть небольшое отставание.

Если вы хотите понять, как правильно установить Chrome без Docker, прочитайте Dockerfile здесь: https://github.com/joelgriffith/browserless/blob/master/Dockerfile#L27 .