google-chrome 无法移动到新的命名空间

nov*_*100 20 linux google-chrome docker kubernetes-helm google-chrome-headless

我试图以非 root 用户身份在 docker 容器中运行 google-chrome --headless 来执行一些测试。每次我尝试启动它时,它都会引发以下错误:

谷歌浏览器 --headless

无法移动到新命名空间:支持 PID 命名空间,支持网络命名空间,但失败:errno = 不允许操作无法生成小型转储。非法指令

它是一个在 k8s 集群中运行的 docker 容器。操作系统是 Ubuntu 16.04。

命名空间已启用,用户是非 root

我不想使用 --no-sandbox 选项,因为这是一个安全问题。

我不能使用 docker run --security-opt=syscomp:unconfined 因为它是使用 helm 部署的。

是否缺少我需要在容器本身内为 chrome 设置的系统权限?

nov*_*100 32

在广泛研究互联网后,我想我找到了答案:

沙箱  出于安全原因,谷歌浏览器在基于容器的环境中运行时无法提供沙箱。要在基于容器的环境中使用 Chrome,请将 --no-sandbox 标志传递给 chrome 可执行文件

所以对我来说似乎没有比 --no-sandbox 更好的解决方案,尽管它不是很安全,但互联网上有人声称使用“--no-sandbox”作为其运行仍然是安全的在以任何方式受到额外保护的容器内。

  • 如果您需要,我找到了一种方法,请参阅此/sf/ask/4364190701/ (2认同)

Joh*_*olz 12

尽管这不能回答您的问题,因为您无法设置它security-opt,但这对于其他有类似问题的人来说仍然是一个很好的解决方案。

下载此chrome.json文件,其中包含自定义安全配置文件。

将安全配置文件与--security-opt seccomp=path/to/chrome.jsondocker-compose 一起使用:

# docker-compose.yml
version: '3'
services:
  <service name>:
    #
    # the service configuration
    #
    security_opt:
      - seccomp=<path to downloaded chrome.json>
Run Code Online (Sandbox Code Playgroud)

请参阅/sf/answers/3778278871/


更新

现在可以使用--cap-add=SYS_ADMIN以下命令来完成此操作docker-compose.yml

# docker-compose.yml
services:
  <service name>:
    #
    # the service configuration
    #
    cap_add:
      - SYS_ADMIN
Run Code Online (Sandbox Code Playgroud)

请参阅: https: //pptr.dev/guides/docker#usage