在MacBookPro主机上运行GUI应用程序的Docker容器。

17

我一直在尝试按照https://learning-continuous-deployment.github.io/docker/images/dockerfile/2015/04/22/docker-gui-osx/上的说明,在MacBookPro主机(使用Docker工具)中运行docker容器内的GUI应用程序。

我创建了一个简单的docker容器,使用Fedora 23,并安装了firefox。

我尝试运行firefox,大约一分钟后出现以下错误:

Unable to init server: Broadway display type not supported: 192.168.57.3:0
Error: cannot open display: 192.168.57.3:0

有人知道这个错误是什么意思并且如何修复它吗?

3个回答

24

如果您使用的是Mac电脑,以下步骤可能会对您有所帮助:

  1. 安装XQuartz
  2. 打开XQuartz,前往"偏好设置" > "安全性与隐私",勾选允许来自网络客户端的连接选项
  3. 重新启动电脑
  4. 启动XQuartz(从应用程序文件夹或使用命令open -a XQuartz
  5. 使用xhost + $IP允许来自您的 IP 地址的连接(请参阅注释1)
  6. 在Docker容器中运行Firefox浏览器(请参阅注释2)

注释1:以下是一个获取您 IP 地址的不错技巧:

export IP=$(ifconfig en0 | grep inet | awk '$1=="inet" {print $2}') 

注2: 下面是启动 Firefox 的示例 Docker 运行命令

docker run -it -e DISPLAY=$IP:0 -v /tmp/.X11-unix:/tmp/.X11-unix <image> firefox

谢谢。据我所记,这是我遵循的程序。我不再拥有MacBook Pro,无法进行验证。 - emory
4
第三步很重要!仅仅退出并重新登录是不够的! - trusktr
这个方法非常有效。应该被采纳为最佳答案。 - Motin
谢谢!运行得很好。问题:为什么我们必须获取网络适配器的实际地址?如果所有这些都发生在单个主机上,为什么不能使用127.0.0.1?无关:grep ... | awk ...总是多余的。您始终可以向awk添加匹配子句:grep abc | awk '$1=="xyz"'变成awk '$0~/abc/ && $1=="xyz"'。即使如此,这里也是多余的,因为对于其第一列等于“inet”的行,grep inet始终为真;您可以删除grep命令。 - wbadart
我现在又开始使用MacBookPro了。我不知道为什么这个解决方案以前对我无效,但现在有效了。所以我可以亲自验证它的可行性。也许它适用于现代的MacBookPro而不是旧型号。不确定。 - emory

2

重启我的笔记本电脑解决了我的问题。


这对我也起作用了。可能与设置好一切后的XQuartz或xhost有关。 - Ken J

2
我也遇到了同样的错误,不幸的是重启并没有解决我的问题。然而,我通过挂载并指向我的本地.Xauthority文件得以使它正常工作。
IP=$(ifconfig en0 | grep inet | awk '$1=="inet" {print $2}')
docker run --rm  --name firefox -e DISPLAY=$IP:0 -e XAUTHORITY=/.Xauthority --net host -v /tmp/.X11-unix:/tmp/.X11-unix -v ~/.Xauthority:/.Xauthority  jess/firefox

当然,这需要假设您的 XQuarts/xhost 已根据此答案进行正确配置。

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