最新更新后,Docker 中的 Headless chrome“未找到符号”错误

chr*_*oes 6 docker google-chrome-headless

我有一个 Docker 容器,我已经将它用于依赖无头 Chrome 的节点应用程序相当长一段时间了。这个容器一直工作到现在,没有做任何改变。

容器构建得很好,但是 chromium 在容器内启动时出现错误:

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
Run Code Online (Sandbox Code Playgroud)

这是我的 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"]
Run Code Online (Sandbox Code Playgroud)

我也尝试过使用它来安装 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
Run Code Online (Sandbox Code Playgroud)

也:

# 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
Run Code Online (Sandbox Code Playgroud)

编辑:事实证明,Chromium 于 9 月 25 日在 APK 存储库上进行了更新,这与它停止工作的时间一致。所以现在我必须弄清楚如何让它再次工作或切换到旧版本。

我尝试使用以下命令安装以前的版本:

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
Run Code Online (Sandbox Code Playgroud)

现在,我在运行chromium-browser命令时遇到分段错误。

Mic*_*yxí 4

前几天也碰到了这个。我怀疑chrome的edge版本坏了。从历史上看,我使用它的原因是因为新--headless选项。但稳定版本目前为77.0.3865.75-r0,这足以满足我所需的一切。所以我Dockerfile现在看起来像这样:

...
RUN apk update && apk upgrade && \
  apk add --no-cache \
  chromium
...
Run Code Online (Sandbox Code Playgroud)

我的用例是构建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/*
Run Code Online (Sandbox Code Playgroud)

错误是:

            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
Run Code Online (Sandbox Code Playgroud)