OSX X11错误无法打开显示器。

12

我尝试在 MacOS 上运行任何 GUI 容器。无论我尝试的容器是 firefox、chrome、tor、spotify 等等,都会出现错误 Error: cannot open display。而且这个问题不仅限于 docker run 命令,即使我尝试运行 xhost + 也会出现同样的错误。

我已经安装了最新版的 XQuartz,并且它正在运行中。在安全设置下,我已经开启了 "允许网络连接"。我已经尝试构建自己的镜像和拉取 jessie frazelle 的镜像。我不认为这是一个 Docker 或 Dockerfiles 的问题。这是主机(我的笔记本电脑)上的一些问题。但我似乎无法找出它是什么。

MacOS Sierra 10.12.5
Docker 17.12.0 Stable
XQuartz 2.7.11 (xorg-server 1.18.4)
我的本地 $DISPLAY 已设置为 :0.0


尝试将DISPLAY设置为您的Mac IP地址,例如$(ifconfig en0 | awk '/inet /{print $2 ":0"}') - Mark Setchell
这似乎有所帮助。我得到了混合的结果。例如:$ echo $DISPLAY 192.169.1.11:0 $ xhost + xhost:无法打开显示器“192.169.1.11:0”我只是为了测试再次尝试容器后才进行了上述操作,以便查看。这与以前相同的结果,但现在需要更长时间。包括给我此错误的容器。我尝试过的3个容器(tor,chrome,ff)都给我原始错误“无法打开显示器”。只有tor和ff这次给我了这个错误。所有仍然不起作用,但它们都是权限问题。 - Byron Mansfield
2个回答

16

所以我终于解决了这个问题,而且似乎非常简单。虽然我不确定这个方法是如何解决问题的,但现在容器可以正常工作了。

我是这样解决的:打开XQuartz,然后从“应用程序”菜单中打开“终端”应用程序,接着运行命令export DISPLAY=192.168.1.X:0,然后再运行xhost +。它输出了类似于“访问控制已禁用,客户端可以从任何主机连接”的内容。之后我就能够运行docker run命令来启动所需的GUI容器了。

虽然我仍然不确定为什么不能直接从我的笔记本电脑终端应用程序运行容器,但至少这个方法可行。这可能与我设置的本地环境有关。希望这能帮助其他遇到同样问题的人。


很好,你解决了问题,但是xhost +仍然不安全,这一点应该指出来...不过还是很好,你为自己解决了问题。 - Pryftan

15

根据@Byron的答案,我发现我可以通过在普通终端中运行这两个命令使其正常工作:

export DISPLAY=:0
/opt/X11/bin/xhost +

4
抱歉,它们都不能在我的Mac OS 10.14.6上使用。请问您能告诉我适用于Mac OS的正确步骤吗?我想启动Oracle的runInstaller而不是docker run。 - Santana
谢谢@lucas-pottersky。对我有用。MacOS Catalina 10.15.7 Docker 20.10.14 XQuartz 2.8.1 (xorg-server 1.20.11) - giuliot
需要注意的是,使用 xhost + 是不安全的。我不确定是否总有更好的解决方案,但如果有的话,一定应该使用它。 - Pryftan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接