相关疑难解决方法(0)

Docker 上的 Node.js + Puppeteer,没有可用的沙箱

我正在构建一个 node.js LTS 应用程序。我跟着 puppeteer 文档,所以我的 Dockerfile 有这个内容:

FROM node:12.18.0

WORKDIR /home/node/app
ADD package*.json ./

# Install latest chrome dev package and fonts to support major charsets (Chinese, Japanese, Arabic, Hebrew, Thai and a few others)
# Note: this installs the necessary libs to make the bundled version of Chromium that Puppeteer
# installs, work.
RUN apt-get update \
    && apt-get install -y wget gnupg \
    && wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add - \
    && sh -c …
Run Code Online (Sandbox Code Playgroud)

google-chrome node.js docker docker-compose puppeteer

10
推荐指数
3
解决办法
2万
查看次数

使用--no-sandbox运行无头Chrome /木偶游戏

背景

我构建了一个在本地主机上使用Puppeteer的应用程序。现在,我试图将其部署到Debian环境中,运行Puppeteer的脚本正在超时。经过研究,我意识到这是一个普遍的问题。大多数Debian环境缺少运行Chromium所需的依赖项。

问题

我在这里找到了一些推荐的方法来使用Docker运行应用程序。

我可以使用Docker运行应用程序,但是将Chrome特定的数据添加到Docker文件后,我会遇到一些错误。

无法移动到新名称空间:支持PID名称空间,支持网络名称空间,但失败:errno =不允许操作

建议以Docker文件中的用户身份运行该应用程序。但是,当我添加该用户时,该用户会遇到上述错误。

然后,当我尝试以root用户身份运行该应用程序时,出现了一个新错误,

不支持以不带--no-sandbox的根用户身份运行。

尽管不建议这样做,但我还是希望运行该应用程序,甚至--no-sandbox可以查看其是否正常运行。

我一直在运行这样的应用程序,

docker run -p 3000:3000 user/app-name
Run Code Online (Sandbox Code Playgroud)

Docker文件

FROM ubuntu:16.04

# Application parameters and variables
ENV NODE_ENV=production
ENV PORT=3000
ENV Root_Dir /
ENV application_directory /usr/src/app
ENV font_directory /usr/share/fonts/noto

# Configuration for Chrome
ENV CONNECTION_TIMEOUT=60000
ENV CHROME_PATH=/usr/bin/google-chrome

RUN mkdir -p $application_directory
RUN mkdir -p $font_directory

# Dependencies needed for packages downstream
RUN apt-get update && apt-get install -y \
  apt-utils \
  unzip \
  fontconfig \
  locales \
  gconf-service …
Run Code Online (Sandbox Code Playgroud)

chromium docker puppeteer

5
推荐指数
4
解决办法
9018
查看次数

为什么 Angular 应用程序的测试应该使用 Chrome 的 --no-sandbox 选项

有关测试 Angular的信息包括一个示例配置(Karma 和 Protractor),其中禁用 Chrome 浏览器的沙箱:

browsers: ['Chrome'],
customLaunchers: {
  ChromeHeadlessCI: {
    base: 'ChromeHeadless',
    flags: ['--no-sandbox']
  }
},
Run Code Online (Sandbox Code Playgroud)

const config = require('./protractor.conf').config;

config.capabilities = {
  browserName: 'chrome',
  chromeOptions: {
    args: ['--headless', '--no-sandbox']
  }
};

exports.config = config;
Run Code Online (Sandbox Code Playgroud)

为什么?为什么不启用沙箱?这样做有充分的理由吗?测试是否有必要正常运行?

google-chrome karma-runner protractor angular

5
推荐指数
1
解决办法
1630
查看次数