如何从Docker容器运行Chromium


9

环境

  • MacOS Sierra 10.12.6
  • Docker版本17.09.0-CE,构建afdb6d4
  • Ubuntu 16.04
  • XQuartz 2.7.9

我想将Docker容器中的Chromium浏览器打开到我的Mac桌面上。

docker run -i -t ubuntu:16.04 /bin/bash
apt-get update
apt-get install alsa-base chromium-browser xauth
adduser myuser

承诺

docker commit 2862a7bfcc2f  acme/mycontainer:0.1

myuser从容器失败运行铬浏览器

docker run --user myuser -i -t acme/mycontainer:0.1 /usr/bin/chromium-browser
Failed to move to new namespace: PID namespaces supported, Network namespace supported, but failed: errno = Operation not permitted

我敢打赌,还有更多

有指针吗?

UDPATE-使用 --privileged

消除错误,请参阅serverfault上的线程,但不会显示UI

docker run \
       --privileged \
       --user mysuer \
       -i -t acme/mycontainer:0.1 /usr/bin/chromium-browser

还有这个

docker run \
   --privileged \
   --net host \
   -v /tmp/.X11-unix:/tmp/.X11-unix \
   -e DISPLAY=$DISPLAY \
   -e XAUTHORITY=/.Xauthority \
   -v ~/.Xauthority:/.Xauthority:ro \
   --name chromium \
   --user mysuser \
   -i -t acme/mycontainer:0.1 /usr/bin/chromium-browser

铬未显示

更新20171011

docker run \
   --privileged \
   --net host \
   -v /tmp/.X11-unix \
   -e DISPLAY \
   --name chromium \
   --user myuser \
   -i -t acme/mycontainer:0.1 \
   bash

发生Chromium Gtk: cannot open display: [...] org.macosforge.xquartz:0错误

$ chromium-browser --verbose
[37:37:1011/154632.348303:VERBOSE1:breakpad_linux.cc(1978)] Breakpad disabled
[1:1:1011/154632.378280:VERBOSE1:zygote_main_linux.cc(537)] ZygoteMain: initializing 0 fork delegates
[1:1:1011/154632.378653:INFO:cpu_info.cc(50)] Available number of cores: 4
[37:37:1011/154632.381303:WARNING:browser_main_loop.cc(275)] Gtk: cannot open display: \
      /private/tmp/com.apple.launchd.Y2wR3QWw57/org.macosforge.xquartz:0

在我的Mac上编辑 sshd_config

sudo vim /etc/ssh/sshd_config
X11Forwarding yes
X11DisplayOffset 10
XAuthLocation /opt/X11/bin/xauth

在我的Mac上 DISPLAY

$ env | grep DISPLAY
DISPLAY=/private/tmp/com.apple.launchd.Y2wR3QWw57/org.macosforge.xquartz:0

在磁盘上

ls -al /private/tmp/com.apple.launchd.gCYQToI4lb/*
srw-rw-rw-  1 joel  wheel     0B Oct 11 17:50 
/private/tmp/com.apple.launchd.gCYQToI4lb/org.macosforge.xquartz:0=

1
@zabumba,您有什么用吗?
达米安·鲍威尔

Answers:


2

您的需要使我想起了子用户。经过设计,可以在Docker容器中运行最终用户应用程序,以保护隐私并提高安全性。


记得要提问题。看看是否有人可以提供帮助。我喜欢您指向子用户的指针。很有意思
zabumba

subuser可能就是我一直在寻找的“ Qubes OS lite”!谢谢!
戴夫

1

我没有Mac可以试用,但是这里有一些一般建议:

X11通常由密钥文件保护,该密钥文件只能由拥有显示器的用户读取,因此可以使用文件系统权限来断言只有可以读取该文件的其他程序才可以连接。客户端读取该文件,然后通过套接字向服务器重复其内容。所以,我认为您在正确的方向上

-e XAUTHORITY=/.Xauthority \
-v ~/.Xauthority:/.Xauthority:ro \

接下来,您显示SSH X11转发设置,但没有指示您将ssh插入docker容器。SSH转发通常由以下人员使用:

ssh $HOST -X program-which-launches-gui

为此,您需要在docker容器中运行SSH服务器,这需要一些工作...

接下来,您显示一个DISPLAY=/path/to/socket我以前从未使用过的。如果这是MacOS的发明,则Docker化的Ubuntu可能不理解该格式。

最后,您可以从Docker容器内部使用'strace'命令查看chrome实际尝试执行的操作。

strace chromium-browser 2>&1 | egrep "open|stat|connect|bind"

这可以帮助您缩小放弃之前哪些操作失败的范围。


我会给您赏金,因为它的指针很好,但是我还没有解决这个问题。我将创建另一个赏金,看看是否有人可以提供帮助。最终提供一个Dockerfile。thx
zabumba
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.