- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
背景
我在本地主机上构建了一个使用 Puppeteer 的应用程序。现在,我尝试将其部署到 debian 环境中,运行 Puppeteer 的脚本超时。经过研究,我意识到这是一个常见问题。大多数 Debian 环境缺少运行 Chromium 所需的依赖项。
问题
I found some recommended ways to run the application using Docker here.
我可以使用 Docker 运行该应用程序,但是一旦我将 Chrome 特定数据添加到我的 Docker 文件中,我就会收到一些错误。
Failed to move to new namespace: PID namespaces supported, Network namespace supported, but failed: errno = Operation not permitted
建议以 Docker 文件中创建的用户身份运行应用程序。但是,当我添加该用户时,该用户会收到上述错误。
然后,当我尝试以 root 身份运行应用程序时,我收到一个新错误,
Running as root without --no-sandbox is not supported.
虽然不建议这样做,但我想让应用程序即使使用 --no-sandbox
也能运行,看看它是否有效。
示例
我一直这样运行应用程序,
docker run -p 3000:3000 user/app-name
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 \
libasound2 \
libatk1.0-0 \
libc6 \
libcairo2 \
libcups2 \
libdbus-1-3 \
libexpat1 \
libfontconfig1 \
libgcc1 \
libgconf-2-4 \
libgdk-pixbuf2.0-0 \
libglib2.0-0 \
libgtk-3-0 \
libnspr4 \
libpango-1.0-0 \
libpangocairo-1.0-0 \
libstdc++6 \
libx11-6 \
libx11-xcb1 \
libxcb1 \
libxcomposite1 \
libxcursor1 \
libxdamage1 \
libxext6 \
libxfixes3 \
libxi6 \
libxrandr2 \
libxrender1 \
libxss1 \
libxtst6 \
ca-certificates \
fonts-liberation \
libappindicator1 \
libnss3 \
lsb-release \
xdg-utils \
wget
# It's a good idea to use dumb-init to help prevent zombie chrome processes.
ADD https://github.com/Yelp/dumb-init/releases/download/v1.2.0/dumb-init_1.2.0_amd64 /usr/local/bin/dumb-init
RUN chmod +x /usr/local/bin/dumb-init
# Install Node.js
RUN apt-get install --yes curl &&\
curl --silent --location https://deb.nodesource.com/setup_8.x | bash - &&\
apt-get install --yes nodejs &&\
apt-get install --yes build-essential
# Install emoji's
RUN cd $font_directory &&\
wget https://github.com/emojione/emojione-assets/releases/download/3.1.2/emojione-android.ttf &&\
wget https://github.com/googlei18n/noto-cjk/blob/master/NotoSansCJKsc-Medium.otf?raw=true && \
fc-cache -f -v
RUN apt-get update && apt-get install -y wget --no-install-recommends \
&& wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add - \
&& sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list' \
&& apt-get update \
&& apt-get install -y google-chrome-unstable fonts-ipafont-gothic fonts-wqy-zenhei fonts-thai-tlwg fonts-kacst ttf-freefont \
--no-install-recommends \
&& rm -rf /var/lib/apt/lists/* \
&& apt-get purge --auto-remove -y curl \
&& rm -rf /src/*.deb
# Cleanup
RUN apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
# Install puppeteer so it's available in the container.
RUN npm i puppeteer
# Add user so we don't need --no-sandbox.
RUN groupadd -r pptruser && useradd -r -g pptruser -G audio,video pptruser \
&& mkdir -p /home/pptruser/Downloads \
&& chown -R pptruser:pptruser /home/pptruser \
&& chown -R pptruser:pptruser /node_modules
RUN cd $application_directory
WORKDIR $application_directory
# Install app dependencies
COPY package.json .
# Bundle app source
COPY . .
# Build
RUN npm install
USER pptruser
# Expose the web-socket and HTTP ports
EXPOSE 3000
ENTRYPOINT ["dumb-init", "--"]
CMD ["google-chrome-unstable", "npm", "start"]
问题
如何运行 Docker 并传递 ,
--no-sandbox
param 所以它会让我在 root 中运行它?
或者,我需要在当前的 Docker 文件中更改哪些内容,以便它可以让我以 USER pptruser
身份运行它
当前问题 -
运行为
USER pptruser
Failed to move to new namespace: PID namespaces supported, Network namespace supported, but failed: errno = Operation not permitted
运行为
root
Running as root without --no-sandbox is not supported.
最佳答案
我在尝试在 Alpine Docker 容器中 headless 运行 Chromium 时遇到了类似的问题,显然还有许多其他问题(例如 here 、 here )。 --no-sandbox
选项是一种简单的解决方法,但显然是一种很差的安全实践。对我有用的是设置自定义 seccomp
.
下载this file (如有兴趣,请参阅作者笔记here)。然后在启动 Docker 时传递选项 --security-opt seccomp=path/to/chrome.json
,或者在 docker-compose.yml
中指定相同的选项(如果您需要)正在使用一个。
关于docker - 使用 --no-sandbox 运行 headless Chrome/Puppeteer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50662388/
Paypal 最近更改了他们在 developers.paypal 中的用户界面,因此,我找不到可以登录旧 SANDBOX 帐户的位置。 在新的 developer.paypal.com 中,在 Ap
我正在尝试使用 loadPhotoForSize: withCompletionHandler: 为游戏中心的 friend 获取头像但它一直在抛出GKErrorDomain Code=3 "The
我在 paypal developer 中创建了多个沙箱帐户。我已在所有这些帐户上启用 business pro,以便接收直接付款。但是,对于在美国以外的国家/地区创建的商业专业账户,发送直接付款的
我能够使用 node 用户并使用 --cap-add=SYS_ADMIN 设置沙箱使其正常工作,但 AWS ECS Fargate 不支持添加 SYS_ADMIN 作为 linux 参数。因此,我试图
我正在尝试使用 scotty 创建一个简单网站的教程,但是当我尝试命令“cabal sandbox init”时出现错误: cabal: unrecognised command: sandbox (
我想制作一个非常基本的 Excel 插件。但是,在 Excel Online 中加载 xml 文件后出现错误: 有人知道如何修复这些错误吗? 这是 xml 文件: 2145a915-4e7b-
我使用 Ambari 运行了 pig 服务检查,但它失败了并出现以下异常。 2016-04-09 20:35:19,399 [JobControl] INFO org.apache.hadoop.m
我正在尝试将一个Firebase函数部署到使用Pupeteer的FireBase项目中,我让它在我的本地计算机上运行,但当它尝试在FireBase上运行时,我收到以下错误:。我在网上看到其他人说要使用
我已阅读 Wikipedia article ,但我不太确定它的含义,以及它与版本控制有多么相似。 如果有人能用非常简单的术语解释什么是沙箱,那将会很有帮助。 最佳答案 A sandpit or sa
重新访问一个一个月左右没打开的项目,发现之前设置的沙箱账户无法访问,访问; http://admin.wechat.com/debug/cgi-bin/sandbox?t=sandbox/login
Apple 在 WWDC 17 上推出了 ARKit,他们还在 Xcode 9 中添加了一个名为“增强现实应用程序”的新项目模板,它基本上应该是 WWDC 主题演讲或类似事件期间的演示应用程序。 但是
我正在尝试使用 How can I create a secure Lua sandbox?构建我自己的泄漏沙箱。 我正在尝试创建一个 Lua 沙箱,其中一些 Lua 函数可以访问沙箱外的其他一些 L
Hy 这里是一个例子 Example 为什么当我使用 沙箱我看不到播放器..我想使用沙箱来阻止弹出窗口,但看起来如果我使用它我看不到播放器 有没有allow-objects ? 我在那个页面上也有一
我对新的 PayPal 开发人员网站和 Sandbox 感到悲痛。我在 Developer 中创建了一个个人帐户,但我添加的资金没有显示出来。我读过一篇论坛帖子,说您必须通过 Sandbox 登录来添
在沙盒模式下查询 Instagram API 以获取与 token 相关的用户喜欢的媒体,我没有得到任何数据。当然,用户被授权在沙盒中使用该应用程序。 获取:https://api.instagram
我正在开发记录用户音频的应用程序,并在表格 View 的另一个屏幕上显示从此应用程序制作的所有早期录音。单击特定行时,必须播放录音。我如何实现这一目标,是否有任何资源可以帮助我实现同样的目标? 我的代
我有运行 Express Checkout 的沙箱。当我在我的沙盒中使用卖家账户进行测试付款时,一切正常,付款成功,买家账户从中扣除购买金额。但是卖家账户从来没有得到任何钱。 我在某处读到,要激活卖家
谁知道我在哪里可以启用 “商家未启用账单地址请求” 在沙箱环境中? 谢谢达尔科 最佳答案 请打开ticket向 MTS 技术团队提供帮助。 关于paypal-sandbox - 商家未启用账单地址请求
您好,我是 Paypal 集成的新手。 我已在我的在线商店中成功设置了 Express Checkout。 但在我的 Sandbox 帐户中,无论实际值(value)多少,每笔交易的余额总是减少 20
在 Paypal Sandbox 中,当我尝试向买家账户添加信用卡时,我不断收到错误消息“该卡号已分配给另一个 PayPal 账户。”我不明白,因为当我创建测试帐户时,Paypal 刚刚为我生成了号码
我是一名优秀的程序员,十分优秀!