【问题标题】:Starting Xserver in Docker Ubuntu container在 Docker Ubuntu 容器中启动 Xserver
【发布时间】:2014-11-22 10:04:47
【问题描述】:

我的容器中安装了最少的 Ubuntu,我希望 Xserver 运行。 我需要 XServer,因为我的应用需要 meshlabserver,它本身也需要 Xserver。

我安装了 xserver-xorg 和所有其他软件包,但是当我尝试通过容器启动 X 时

/usr/bin/X :0

上面写着:

Fatal server error:
(EE) xf86OpenConsole: Cannot open /dev/tty0 (No such file or directory)

我做错了什么?如何启动 X 服务器?

更新:

相关问题:Host screen turns off when I start X server in docker container

【问题讨论】:

  • 您需要真正的显示器吗?如果没有,Xvfb 可能足以满足您的目的。 XServer 是否必须在容器中运行?您可以(重新)使用在主机上运行的一个。
  • 嗯...我真的不知道什么是 Xvfb。我不需要应用程序的实际图形输出,当 Xserver 未运行时,meshlabserver 无法启动,并显示以下输出:meshlabserver: cannot connect to X server。我可以使用 Xvfb 来“模拟”X 服务器吗?我真的不需要连接到主机上的某个外部 Xserver,因为在容器之外的任何地方我都不需要那个 Xserver。
  • 原来 xvfb 不工作(至少现在)。我的应用程序中出现许多错误: libGL 错误:未找到匹配的 fbConfigs 或视觉对象 libGL 错误:无法加载驱动程序:swrast OpenCV 错误:在 createWindowlessOpenGLContext 中断言失败(fbConfigs != 0)
  • 您的应用似乎需要 openGL,而且 OpenGL 和 Xvfb(以及其他 X 服务器)似乎存在问题。您可能想在谷歌上搜索“无法加载驱动程序:swrast”。不确定这是否可以轻松解决。否则,您唯一的选择可能是使用主机 X 服务器 - 假设它支持应用程序所需的功能。
  • @AlexPetrenko:显然你那里的 Mesa 版本并没有先尝试软管道。我认为最直接的方法是构建一个仅支持软管道的自定义 Mesa 变体并将其安装在系统上。

标签: ubuntu docker xserver lxc linux-containers


【解决方案1】:

在我的情况下,当我以特权模式启动容器时它运行良好:

docker run --privileged

所以 XServer 可以从主机访问一些设备(包括/dev/tty0)。

一般情况下,在特权模式下运行容器是个坏主意,但在我的情况下没关系。 为避免使用--privileged,您还可以尝试docker run 命令的--device 选项。

【讨论】:

  • 我认为普遍的看法是,如果您确实使用特权模式,那么您应该只使用您隐含信任或自己构建的软件。并确保 docker 服务器仅使用 Unix 套接字而不是 HTTP 的 API。
  • 我自己构建了这个容器(当然 XServer 除外),所以,是的,我相信它。
  • 该评论更适合那些关注并阅读此答案的人。我并不讨厌您选择按照自己喜欢的方式使用 Docker 的能力,但是安全性很容易受到损害,因此警告那些查看您的答案但不理解其含义的人可能会导致痛苦。只是想帮忙。
猜你喜欢
  • 2017-09-11
  • 1970-01-01
  • 2020-07-17
  • 1970-01-01
  • 1970-01-01
  • 2021-05-19
  • 1970-01-01
  • 2017-05-26
  • 2016-04-14
相关资源
最近更新 更多