具有共享X11套接字的Docker:为什么在容器外“启动”Firefox?
我有以下情况:
- 我设置了一个可以访问X11套接字的Docker容器,本质上是这样的: https : //stackoverflow.com/a/25334301
- 然后我在容器中安装了Firefox,并使用bash中的“firefox”命令启动它。
我注意到:如果在容器中启动Firefox时,Firefox已经在我的主机上运行,它实际上已经“逃脱”了容器,因为它只是打开了Firefox主机实例的一个新窗口。 因此,它可以访问主机上的所有内容,容器变得毫无用处。
这也反过来反之亦然:如果Firefox没有在主机上运行,我在容器中启动一个实例,它真的在容器中运行。 如果我在主机上启动Firefox,新的实例也在容器中运行。
但是,我无法用gvim而不是Firefox重现这种行为。
我很清楚X11套接字共享中固有的安全问题,但是我不能解释我上面描述的情况。 为什么一个容器在其受限制的环境之外启动一个“过程”—或者说一个窗口? 而且我的主机系统甚至有可能仅仅是因为同一个程序已经在一个容器中运行了而在一个容器中启动一个进程呢?
(请注意,我不知道如何调用除“process”以外的程序的graphics化实例,虽然在这种情况下可能不是一个真正的过程)
系统:Ubuntu GNOME 14.10,Docker 1.5,Ubuntu:最新的Docker镜像。
更新:如果我使用-new-instance
标志启动Firefox,则不会发生这种-new-instance
,所以它似乎是一个比X11套接字问题更多的Firefox问题。
更新2:似乎也发生在其他情况下,例如使用ssh与X-forwarding:
https://unix.stackexchange.com/questions/104476/why-starting-firefox-from-command-line-in-vm-starts-the-firefox-in-the-host-ma
和
https://superuser.com/questions/462055/launching-firefox-on-remote-server-causes-local-firefox-to-open-the-page-instead
现在的问题是,Firefox如何做到这一点? 他们用什么样的X11巫术来查明Firefox是否已经在运行?