运行无头Chromium浏览器会抛出错误“无法读取DnsConfig”(在Docker容器内部)

时间:2019-02-23 04:50:09

标签: angular docker karma-jasmine chromium

我的目标
使用Karma / Jasmine在我的Angular 6应用程序(在Docker容器中运行)上运行单元测试。为了运行这些测试,似乎我需要一个Web浏览器。因此,似乎无头铬是一个不错的选择。我已经通过Dockerfile将其与其他库一起安装,但是在Docker容器中运行测试失败(在其外部运行测试可以正常工作)。

错误:

23 02 2019 04:28:08.884:ERROR [launcher]: ChromiumHeadless stdout: 
23 02 2019 04:28:08.884:ERROR [launcher]: ChromiumHeadless stderr: [0223/042808.557529:WARNING:dns_config_service_posix.cc(326)] Failed to read DnsConfig.
[0223/042808.591436:FATAL:udev_loader.cc(38)] Check failed: false.

实际上打开浏览器(http://localhost:9876/),然后运行测试仍会导致无头失败,但测试会显示在浏览器中。很高兴看到这些测试,但是如果我希望这些单元测试最终作为CI或其他内容的一部分运行,就不太有用。

我的猜测是,我实际上可能不需要DNS(它确实从stderr输出中显示警告),但是我不确定如何禁用它。

以下是Karma测试运行程序中的当前浏览器配置:

browsers: ['ChromeHeadlessCustom'],
customLaunchers: {
  ChromeHeadlessCustom: {
    base: 'ChromiumHeadless',
    flags: [
      '--no-sandbox',
      '--allow-insecure-localhost',
      '--homepage=about:blank',
      '--no-first-run',
      '--headless',
      '--disable-software-rasterizer',
      '--disable-gpu',
      '--disable-translate',
      '--disable-extensions',
      '--disable-setuid-sandbox',
      '--remote-debugging-port=9876'
    ]
  }
}

唯一重要的标志是headlessno-sandbox标志,这是我在浏览其他帖子时投入的所有其他东西,并且似乎没有任何作用。

Dockerfile(我认为我已经成功安装了Chromium):

FROM node:8-alpine

# Install Google Chrome to run Angular unit tests
ENV CHROME_BIN="/usr/bin/chromium-browser"
ENV LIGHTHOUSE_CHROMIUM_PATH /usr/bin/chromium-browser

RUN \
  echo "http://dl-cdn.alpinelinux.org/alpine/edge/community" >> /etc/apk/repositories \
  && echo "http://dl-cdn.alpinelinux.org/alpine/edge/main" >> /etc/apk/repositories \
  && echo "http://dl-cdn.alpinelinux.org/alpine/edge/testing" >> /etc/apk/repositories \
  && apk --no-cache  update \
  && apk --no-cache  upgrade \
  && apk add --no-cache --virtual .build-deps gifsicle pngquant optipng libjpeg-turbo-utils udev ttf-opensans chromium
  && rm -rf /var/cache/apk/* /tmp/* /usr/include

因此,如果有人对从这里出发应该有什么建议,或者如果我错过了运行这些测试的其他简单方法,那么将不胜感激!

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题,但是无法定位该问题。但是我发现,像this Dockerfile中的instang数据包可以产生有效的图像,而不会出现此错误。

这可以解决问题,但不能揭示其原因。