如何从 docker 访问显示设备

Posted

技术标签:

【中文标题】如何从 docker 访问显示设备【英文标题】:How to access display device from docker 【发布时间】:2019-04-29 13:38:02 【问题描述】:

我有一个帧缓冲区示例代码(square.c)来在屏幕上绘制一个正方形。它已在我的虚拟机上成功执行。现在我必须在 Ubuntu 容器中运行这个 c 应用程序。但是当我运行这个应用程序时从容器中它显示一条消息为错误:无法打开帧缓冲区设备:没有这样的文件或目录。 错误原因:无法打开/dev/fb0。(fb0不存在)。我想知道有什么方法可以从docker访问显示设备。

我已经在虚拟机中成功编译并执行了 sqaure.c(Framebuffer 代码)。现在我尝试在 ubuntu 容器中运行相同的代码,该容器实际上在我的虚拟机中运行。

泊坞窗文件

下载基础镜像 ubuntu

来自 ubuntu:14.04

维护者 xxaxaxax

运行 apt-get 更新 运行 apt-get install -y vim

运行 apt-get -y install gcc

运行 mkdir /home/test

添加你好/home/test 添加 square /home/test -->sqare->square.c的可执行文件

【问题讨论】:

作为一般规则,您不能从 Docker 容器访问主机的硬件设备,如果访问主机的硬件设备是应用程序的核心部分,您可能会重新考虑为什么要使用 Docker .特别是如果您正在处理直接帧缓冲区访问,我会坚持使用您已经拥有的工作 VM 解决方案(因为 可以 虚拟化显示,不像 Docker)。 感谢David的支持,你的评论很清楚。所以docker不支持任何使用主机硬件设备的应用程序,对吧? 【参考方案1】:

是的,您可以在 docker 中使用主机的硬件。 使用 --privileged 获得对所有设备的访问权限(例如在 /dev/ 中) 或者在运行容器时使用 --device=/dev/fb0 选项。请注意,如果您将设备添加到机器,则该设备将不会出现在正在运行的容器中。

【讨论】:

嗨!发布答案时要记住的一点是查看第一次提出问题的时间。在这种情况下,问题已超过 2 年。这个问题是模棱两可的。 OP 是询问 GPU 还是实际使用容器中的显示器。后者在 2 年前无法完成。在撰写本文时,有人告诉我,后者仍然无法完成。 嗨!回答此类问题时要记住的一件事是问题的年龄。 Docker 在过去两年中发生了很大变化。我鼓励您通过一些对 docker 版本的引用来限定您的答案。此外,我发现对此类老问题的有意义的回答也对在发布问题时可能能够完成的事情有所了解。感谢您回答问题!请继续贡献:D

以上是关于如何从 docker 访问显示设备的主要内容,如果未能解决你的问题,请参考以下文章

如何使用未部署在 swarm 中的 docker 容器从 docker swarm 访问服务?

如何从 docker 容器访问 localhost? [复制]

如何使用文件URI从运行springboot的docker镜像访问本地文件?

如何远程访问私有 docker-registry?

如何远程访问私有 docker-registry?

如何从 Docker 容器访问 JACK 音频