如何将Docker for Mac转发到X11?

时间:2016-07-31 18:03:10

标签: macos docker xquartz

使用Docker for Mac 1.12 (stable)和OS X 10.11.5(15F34),我试图将我的一个容器转发到X11。

首先,我从我的bash shell安装XQuartz:

$ brew cask install xquartz

==> Downloading https://dl.bintray.com/xquartz/downloads/XQuartz-2.7.9.dmg
######################################################################## 100.0%
==> Verifying checksum for Cask xquartz
==> Running installer for xquartz; your password may be necessary.
==> Package installers may write to any location; options such as --appdir are ignored.
Password:
==> installer: Package name is XQuartz 2.7.9
==> installer: Installing at base path /
==> installer: The install was successful.
  xquartz staged at '/usr/local/Caskroom/xquartz/2.7.9' (73M)

然后我继续设置XQuartz ......

open -a XQuartz

在XQuartz首选项中 - >安全选项卡,我启用"允许来自网络客户端的连接"。

然后我应该在我的bash shell中运行xhost + $MY_IP_ADDRESS,但我得到的只是这个错误:

xhost:  unable to open display ""

最后,我读到的所有指南都说我应该像这样运行我的容器:

docker run -e DISPLAY=$MY_IP_ADDRESS:0 -v /tmp/.X11-unix:/tmp/.X11-unix DOCKER_IMAGE

......但这不起作用。在我的特定容器中,我收到此错误:

... cannot connect to X server 10.0.0.131:0

我做错了什么?

3 个答案:

答案 0 :(得分:3)

原来XQuartz 2.7.9中存在一个错误。

使用XQuartz 2.7.10_beta2时,它可以正常工作。

答案 1 :(得分:2)

我在Mac OS上安装了xQuartz 2.7.11。

我收到以下错误 <program>: cannot connect to X server <ip>:0 当试图运行docker容器时。我尝试降级XQuartz,但它仍然没有解决我的问题。

设置的关键部分是为xhost添加你的ip访问控制列表。

xhost + $(ipconfig getifaddr en0)

将ip添加到xhost后,一切正常。没有必要降级Xquartz版本。

答案 2 :(得分:0)

解决方案

安装XQuartz之后,您将horcle_buzz suggested的身份重新启动计算机;启动新的终端会话是不够的。

重新启动后,您可以使用xhost命令来授予您所需的访问权限。只是要小心并了解过于宽松的规则的后果。其他讨论还有更多信息:Running Chromium inside Docker - Gtk: cannot open display: :0

其他发现

一路上我发现了一些额外的东西:

  • XQuartz 必须先运行:
    $ open -a XQuartz
    
  • 您可以公开127.0.0.1而不是查找您的本地IP (caveat emptor:我不是该设置含义的专家):
    $ xhost + 127.0.0.1
    127.0.0.1 being added to access control list
    
  • 您可以在host.docker.internal中使用特殊的docker run标识符:
    $ docker run -e DISPLAY=host.docker.internal:0 jess/firefox
    # ?‍♀️ magic ?‍♂️
    
  • 至少对我而言,ctrl + c不会关闭容器;我需要手动关闭X11窗口。
  • 如果退出XQuartz,则必须在再次启动后xhost重新进行身份验证(权限不会“粘滞”)。
  • 通过这种方式,我在调用/tmp/.X11-unix时不需要挂载docker run

我在macOS Mojave(10.14.6)上使用XQuartz 2.7.11和Docker Desktop 2.1.0.2对此进行了测试。