I'm trying to run a custom node command from within an Alpine linux docker container.
Installed packages:
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
node packages (npm list --depth=0
):
[email protected] /var/www/my_proj/idf/static/js
└── [email protected]
but I'm experiencing some errors:
/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.
it seems that is not able to instantiate chromium. I also tried to modify teh render.js script while it creates an instance of the browser to this:
const browser = await puppeteer.launch({
args: ['--no-sandbox'],
headless: false
});
but I got the same result. Any help on this?
(However, it is possible to force Puppeteer to use a separately-installed version Chrome instead of Chromium via the executablePath option to puppeteer. launch .
Puppeteer is a Node library which provides a high-level API to control headless Chrome or Chromium over the DevTools Protocol. It can also be configured to use full (non-headless) Chrome or Chromium.
Puppeteer is a Node. js library which provides a high-level API to control Chromium (or Firefox) browsers over the DevTools Protocol. This guide helps to use Puppeteer inside a Docker container using the Node. js image.
When you install Puppeteer, it automatically downloads a recent version of Chromium (~170MB macOS, ~282MB Linux, ~280MB Windows) that is guaranteed to work with Puppeteer. For a version of Puppeteer without installation, see puppeteer-core .
This worked for me
Use Puppeteer v0.13.0. As of writing this comment, the latest version of Puppeteer is not compatible with chromium in Alpine linux.
PUPPETEER_SKIP_CHROMIUM_DOWNLOAD="true"
will skip downloading the default version of Chromium when installing Puppeteer.
Dockerfile:
FROM node:11-alpine
ENV CHROME_BIN="/usr/bin/chromium-browser"\
PUPPETEER_SKIP_CHROMIUM_DOWNLOAD="true"
RUN set -x \
&& apk update \
&& apk upgrade \
# replacing default repositories with edge ones
&& 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 \
\
# Add the packages
&& apk add --no-cache dumb-init curl make gcc g++ python linux-headers binutils-gold gnupg libstdc++ nss chromium \
\
&& npm install [email protected] \
\
# Do some cleanup
&& apk del --no-cache make gcc g++ python binutils-gold gnupg libstdc++ \
&& rm -rf /usr/include \
&& rm -rf /var/cache/apk/* /root/.node-gyp /usr/share/man /tmp/* \
&& echo
ENTRYPOINT ["/usr/bin/dumb-init"]
CMD node
NodeJs:
You need to tell Puppeteer to use the installed Chromium version using the following config - 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) => {
// your code
});
If you want to get puppeteer to work on alpine, try using an older version of puppeteer that works with an older version of Chrome. The newest version of Chrome supported on Alpine is 63, which was the version of Chrome used during the development of puppeteer version 0.11.0.
npm install --save [email protected]
This version of Chrome can only be found on Alpine edge. You can install it in older versions of Alpine by running the following.
ENV CHROME_BIN=/usr/bin/chromium-browser
RUN 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 \
chromium@edge \
nss@edge
Make sure you start puppeteer the with the following configuration
import puppeteer from 'puppeteer';
const browser = await puppeteer.launch({
executablePath: process.env.CHROME_BIN || null,
args: ['--no-sandbox', '--headless', '--disable-gpu']
});
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With