允许 X 服务器连接

允许 X 服务器连接

我有一个 docker 容器,我想运行一个需要 X11 的应用程序。我想在主机中公开它。这在笔记本电脑上运行良好,但在台式机上失败了。

更多信息:

我正在使用正确的参数启动docker:

    docker run -it --rm \
    --privileged \
    -e DISPLAY \
    -v /tmp/.X11-unix:/tmp/.X11-unix:ro \
    .... not related options ....
    $(DOCKER_IMAGE) \
    xclock

在笔记本电脑(Ubuntu 19.10)上运行良好,但当我在台式机(Ubuntu 19.10)上尝试同样操作时,我得到了Error: Can't open display: :1

不知何故有些不同,但我找不到区别是什么。

我已经:

  • 残疾人通道控制xhost +
  • 没有~/.Xauthority文件
  • 未启用防火墙
  • 容器相同(两台计算机都从 Dockerhub 下载映像)。
  • 这与 SSH 根本无关,因此 X11 转发无关。
  • 两台计算机都使用 X11(不涉及 wayland)

我注意到笔记本电脑的用途:0和台式机的用途:1,但我认为这并不相关。

问题:有没有我可以查看的日志文件?有没有什么调试问题的技巧?

答案1

笔记本电脑也遇到了同样的问题。如果我添加 --net=host,它就起作用了。从来没想过为什么。

答案2

这是一个老问题,但正如另一个答案中提到的那样,--net=host当我刚刚遇到同样的问题时,它对我有用(Ubuntu 16 LTS 服务器和带有 XQuartz 的 Mac OS 客户端,通过 SSH)。

我认为这是因为,如果$DISPLAY引用localhost并且您使用的是默认的 docker 网络设置 ( --network=bridge),您将获得容器的单独 IP 地址,并且容器内的“localhost”指向的位置与主机操作系统上的位置不同。即使在桥接模式下容器使用正确的地址,我仍然无法让我的 X 服务器监听传入的连接,但我认为这与我自己的设置有关,与 docker 无关(检查 localhost 时主机上的 X 服务器端口看起来是打开的,但使用其面向外部的地址时是关闭的)。但无论如何,如果您同意容器和主机共享完全相同的网络堆栈,那么听起来主机网络应该没问题。

顺便提一下,我认为他们混淆了一些术语,因为 docker 的“bridge”听起来更像是NAT而不是桥接,并且有关主机网络的此页面实际上引用了 NAT,就好像它是主机网络的替代方案一样:

https://docs.docker.com/network/host/


编辑:根据 maru 的评论,我认为他们的术语实际上是正确的:它们在以太网级别定义了一个桥接器,而随之而来的隐式 NAT 设置是 IP 的东西,因此配置位于两个不同的层上。(我想我太习惯像 VirtualBox 这样的 VM 软件在“NAT”和“桥接适配器”之间提供非此即彼的选择。)

答案3

您可以尝试的另一件事是授予必要的 xhost 权限。这解决了我在 ubuntu 20.04 中的问题

在 bash 问题中

允许 X 服务器连接

xhost +Local:*

进而

xhost

你应该看看更多主持人Local

然后从 docker run 命令开始添加并--net=host给我 gui 访问权限。

归功于这个帖子

相关内容