Chrome без головы в Docker «символ не найден» ошибка после последнего обновления - PullRequest
1 голос
/ 01 октября 2019

У меня есть контейнер Docker, который я уже довольно давно использую для приложения узла, которое зависит от безголового хрома. Этот контейнер всегда работал до сих пор, ничего не меняя.

Контейнер работает нормально, но при запуске хрома внутри контейнера возникает ошибка:

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

Вот мой 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"]

Я также пытался использовать это для установки Chrome, но он дает тот же результат:

# 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

, а также:

# 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

РЕДАКТИРОВАТЬТаким образом, получается, что Chromium был обновлен в хранилище APK 25 сентября, что будет соответствовать времени, когда он перестал работать. Так что теперь я должен выяснить, как заставить его работать снова или переключиться на старую версию.

Я попытался установить предыдущую версию, используя:

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

И теперь с этим я получаюошибка сегментации при запуске команды chromium-browser.

1 Ответ

2 голосов
/ 07 октября 2019

Также наткнулся на это несколько дней назад. Я подозреваю, что крайняя версия хрома сломана. Исторически причина для этого была из-за новой опции --headless. Но стабильная сборка в данный момент находится на 77.0.3865.75-r0 , что более чем достаточно для всего, что мне нужно. Итак, мой Dockerfile теперь выглядит следующим образом:

...
RUN apk update && apk upgrade && \
  apk add --no-cache \
  chromium
...

Вариант использования для меня - создать приложение EmberJS и протестировать его на Chrome в режиме без головы .

До этого изменения мой Dockerfile, который больше не работал для меня, был:

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 \
  git \
  chromium@edge \
  nss@edge \
  freetype@edge \
  harfbuzz@edge && \
  rm -rf /var/lib/apt/lists/* \
  /var/cache/apk/* \
  /usr/share/man \
  /tmp/*

И ошибка была:

            Error: Browser exited unexpectedly
            Non-zero exit code: 127
            Stderr: 
             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
...