我正在构建一个 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) 背景
我构建了一个在本地主机上使用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) 有关测试 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)
但为什么?为什么不启用沙箱?这样做有充分的理由吗?测试是否有必要正常运行?