11

使用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 Preferences -> Security 选项卡中,我启用“允许来自网络客户端的连接”。

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

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

我究竟做错了什么?

4

3 回答 3

4

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

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

于 2016-07-31T19:49:46.780 回答
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 版本。

于 2017-03-14T15:59:34.517 回答
2

解决方案

安装 XQuartz 后,您需要按照horcle_buzz 的建议重新启动计算机;启动一个新的终端会话是不够的。

xhost重新启动后,您可以使用该命令授予对任何您需要的访问权限。请小心并了解过于宽松的规则的后果。这个其他讨论有更多信息:在 Docker 中运行 Chromium - Gtk:无法打开显示::0

其他发现

在此过程中我发现了一些额外的东西:

  • XQuartz必须首先运行:
    $ open -a XQuartz
    
  • 您可以公开127.0.0.1而不是查找您的本地 IP (请注意:我不是此设置含义的专家):
    $ 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 对此进行了测试。

于 2019-09-12T22:20:06.370 回答