如何在 docker 容器上设置 chrome 沙箱?
How to setup chrome sandbox on docker container?
我正在尝试 运行 chrome 在 docker 容器上,但我无法正确设置 chrome-sandbox 并且在我搜索人员的每个地方通过传递 --no-sandbox
告诉您仅禁用沙盒。我觉得这是来自“运行 作为 root”的同一个团队的解决方法。这是我的 docker 文件:
FROM buster-slim
# install chrome
RUN adduser --system --group chrome
RUN apt-get update \
&& apt-get install -y --no-install-recommends wget \
&& wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb \
&& apt install -y --no-install-recommends ./google-chrome-stable_current_amd64.deb \
&& rm google-chrome-stable_current_amd64.deb \
&& chown root:root -R /opt/google/chrome/ \
&& chmod 755 -R /opt/google/chrome/ \
&& chmod 4755 -R /opt/google/chrome/chrome-sandbox
USER chrome
ENTRYPOINT ["google-chrome", "--headless", "--disable-gpu"]
但它因非法指令错误而崩溃:
Failed to move to new namespace: PID namespaces supported, Network namespace supported, but failed: errno = Operation not permitted
Failed to generate minidump.Illegal instruction (core dumped)
如果我通过 --no-sandbox
,它不会崩溃。
这是因为 docker 的默认 seccomp 策略拒绝访问 chrome 正确设置沙箱所需的系统调用,从而导致“不允许操作”错误,它们是:克隆、取消共享、arch_prctl、chroot 和 ptrace。
扩展 default 策略以将这些系统调用添加到允许列表,这是与默认值的区别:
{
"syscalls": [
{
"names": [
"clone",
"unshare",
"arch_prctl",
"chroot",
"ptrace"
]
}
]
]
并将 json 文件传递给 docker run
的 --security-opt seccomp=file.json
参数或撰写文件中的相应参数:
version: "3.9"
services:
chrome:
security_opt:
- seccomp=file.json
我正在尝试 运行 chrome 在 docker 容器上,但我无法正确设置 chrome-sandbox 并且在我搜索人员的每个地方通过传递 --no-sandbox
告诉您仅禁用沙盒。我觉得这是来自“运行 作为 root”的同一个团队的解决方法。这是我的 docker 文件:
FROM buster-slim
# install chrome
RUN adduser --system --group chrome
RUN apt-get update \
&& apt-get install -y --no-install-recommends wget \
&& wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb \
&& apt install -y --no-install-recommends ./google-chrome-stable_current_amd64.deb \
&& rm google-chrome-stable_current_amd64.deb \
&& chown root:root -R /opt/google/chrome/ \
&& chmod 755 -R /opt/google/chrome/ \
&& chmod 4755 -R /opt/google/chrome/chrome-sandbox
USER chrome
ENTRYPOINT ["google-chrome", "--headless", "--disable-gpu"]
但它因非法指令错误而崩溃:
Failed to move to new namespace: PID namespaces supported, Network namespace supported, but failed: errno = Operation not permitted
Failed to generate minidump.Illegal instruction (core dumped)
如果我通过 --no-sandbox
,它不会崩溃。
这是因为 docker 的默认 seccomp 策略拒绝访问 chrome 正确设置沙箱所需的系统调用,从而导致“不允许操作”错误,它们是:克隆、取消共享、arch_prctl、chroot 和 ptrace。
扩展 default 策略以将这些系统调用添加到允许列表,这是与默认值的区别:
{
"syscalls": [
{
"names": [
"clone",
"unshare",
"arch_prctl",
"chroot",
"ptrace"
]
}
]
]
并将 json 文件传递给 docker run
的 --security-opt seccomp=file.json
参数或撰写文件中的相应参数:
version: "3.9"
services:
chrome:
security_opt:
- seccomp=file.json