如何在docker中运行google chrome headless?

Isr*_*les 43 google-chrome jenkins docker e2e-testing

我的问题是如何在docker容器中运行google chrome进行e2e测试.我创建了一个Dockerfile官方Jenkins图像,但是当尝试运行谷歌浏览器时,它会崩溃并显示错误:

Failed to move to new namespace: PID namespaces supported, Network namespace supported, but failed: errno = Operation not permitted
Trace/breakpoint trap (core dumped)
Run Code Online (Sandbox Code Playgroud)

Jenkins docker镜像使用Debian jessie.

我可以用--headless旗帜运行谷歌浏览器,不需要X服务器.

这是我的docker文件:

詹金斯官方形象:

一个人使用来自docker的GUI运行google chrome:

我的第一种方法是使用xvbf,但使用--headlessflag 时过程更简单.

我可以使用相同的安装命令在Ubuntu服务器上运行chrome,但是在docker中它会失败.

在其他意图之后,我使用了--no-sandboxflag,但是docker图像显示了下一个错误.

[0427/180929.595479:WARNING:audio_manager.cc(295)] Multiple instances of AudioManager detected
[0427/180929.595537:WARNING:audio_manager.cc(254)] Multiple instances of AudioManager detected
libudev: udev_has_devtmpfs: name_to_handle_at on /dev: Operation not permitted
Run Code Online (Sandbox Code Playgroud)

其实我运行了这个命令:

google-chrome-stable --headless --disable-gpu --no-sandbox http://www.google.com

小智 10

只需启动chrome即可--no-sandbox解决问题

  • 这可能是一个严重的安全问题。此[简单文章](https://www.google.com/googlebooks/chrome/big_26.html)解释了原因。[第二篇详细解释了原因](https://chromium.googlesource.com/chromium/src/+/master/docs/design/sandbox.md) (2认同)
  • 除了`--no-sandbox`,您可以只使用自定义的`seccomp`。请参阅[此处](/sf/answers/3778278871/)。 (2认同)
  • 只是出于好奇@CyrilN。...如果您在 Docker 实例(一种沙箱)内运行 Chrome,那不是会使“--no-sandbox”参数变得无用吗? (2认同)
  • @JwJosefy 也许,我不是 Docker 专家。我认为这取决于您在 Docker 实例上运行的其他内容。如果只是 Chrome,那么我会同意,但持保留态度。 (2认同)

kon*_*oro 6

alpeware/chrome-headless-trunk在ubuntu中使用此图像对我有用!该容器中用于启动无头chrome的命令是这样的:

/usr/bin/google-chrome-unstable \
--disable-gpu --headless --no-sandbox \
--remote-debugging-address=0.0.0.0 \
--remote-debugging-port=9222 --user-data-dir=/data
Run Code Online (Sandbox Code Playgroud)

这是操作中的容器的简短视频 镀铬无头动作

我使用以下命令在Ubuntu中启动了容器:

 docker run -it --rm -p=0.0.0.0:9222:9222 \ 
 --name=chrome-headless \
 -v /tmp/chromedata/:/data alpeware/chrome-headless-trunk
Run Code Online (Sandbox Code Playgroud)

然后使用Chrome连接到位于的调试端口 localhost:9222

经过一些修改,您可能可以在Jenkins中运行它!

资料来源

  • @Merc 是的,这是一个已知的安全问题。您是否有一个不使用 --no-sandbox 的示例可以分享? (3认同)
  • --no-sandbox =巨大的安全问题 (2认同)