I have a Docker container that I've been using for quite some time for a node application which depends on headless chrome. This container has always worked up until just now, without changing anything.
The container builds fine, but chromium has an error when it is started within the container:
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: _ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2ERKS4_mRKS3_: symbol not found
Error relocating /usr/lib/chromium/chrome: _ZNSt19_Sp_make_shared_tag5_S_eqERKSt9type_info: symbol not found
Here's my Dockerfile:
FROM keymetrics/pm2:latest-alpine
# Install git
RUN apk --no-cache upgrade
RUN apk --no-cache add git
# Install chromium
RUN apk -U --no-cache \
--allow-untrusted add \
zlib-dev \
chromium \
xvfb \
wait4ports \
xorg-server \
dbus \
ttf-freefont \
grep \
udev \
&& apk del --purge --force linux-headers binutils-gold gnupg zlib-dev libc-utils \
&& rm -rf /var/lib/apt/lists/* \
/var/cache/apk/* \
/usr/share/man \
/tmp/* \
/usr/lib/node_modules/npm/man \
/usr/lib/node_modules/npm/doc \
/usr/lib/node_modules/npm/html \
/usr/lib/node_modules/npm/scripts
ENV CHROME_BIN=/usr/bin/chromium-browser
ENV CHROME_PATH=/usr/lib/chromium/
# Bundle app files
ADD ./dtms-api-service /server/dtms-api-service
ADD ./dtr-omnicache /server/dtr-omnicache
ADD ./dtr-webservice /server/dtr-webservice
ADD ./env.json /env.json
ADD ./env-dev.json /env-dev.json
ADD ./ecosystem.config.js /ecosystem.config.js
# Install app dependencies
ENV NPM_CONFIG_LOGLEVEL warn
RUN cd /server/dtms-api-service && npm install
RUN cd /server/dtr-omnicache && npm install
RUN cd /server/dtr-webservice && npm install
EXPOSE 3001
ENV PM2_PUBLIC_KEY <secret>
ENV PM2_SECRET_KEY <secret>
CMD ["sh", "-c", "chromium-browser --headless --disable-gpu --no-sandbox --disable-software-rasterizer --remote-debugging-port=9222 & pm2-runtime start ecosystem.config.js --env production"]
I've also tried using this to install chrome but it makes the same result:
# Install chromium
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
As well as:
# Install chromium
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 \
harfbuzz@edge \
nss@edge \
freetype@edge \
ttf-freefont@edge \
&& rm -rf /var/cache/* \
&& mkdir /var/cache/apk
EDIT: So it turns out that Chromium was updated on the APK repository on the 25th of September, which would line up with the time it stopped working. So now I have to figure out how to get it working again or switch to the older version.
I tried installing the previous version using:
RUN echo @v3.10 http://nl.alpinelinux.org/alpine/v3.10/main >> /etc/apk/repositories \
&& echo @v3.10 http://nl.alpinelinux.org/alpine/v3.10/main >> /etc/apk/repositories \
&& apk add --no-cache \
chromium@v3.10 \
harfbuzz@v3.10 \
nss@v3.10 \
freetype@v3.10 \
ttf-freefont@v3.10 \
&& rm -rf /var/cache/* \
&& mkdir /var/cache/apk
And now with this I get a segmentation fault when running the chromium-browser command.