Docker 容器挂载摄像头并显示图像

Docker本身的工作模式是命令行的,但有时候我们需要在Docker容器里运行一些图形化东西如:调用摄像头,输出图像等等,这个时候我们就不得不研究一下如何在Docker中进行 “可视化”。

 



环境

  • Ubuntu 16.04
  • Docker 19.03.2



Docker 挂载摄像头

在运行 Docker时,我们能够通过添加–privileged参数来让Docker容器使用宿主机的现有设备。除此之外,也可以使用--device参数详细明确Docker容器能够使用哪些设备(推荐)。例如我们希望Docker容器能够使用宿主机的摄像头时,可以这样操作:

docker run -it --device=/dev/video0 <image_name>

在Ubuntu系统中,宿主机中的设备默认都保存在 /dev 目录下,可以将这些设备当做文件进行使用。下图是我的/dev目录下的设备情况,标注的 “video0” 即为我的摄像头设备。

dev目录



Docker 显示图像

linux系统目前的主流图像界面服务X11支持 客户端/服务端(C/S)的工作模式,只要在容器启动的时候,将 『unix:端口』或『主机名:端口』共享给Docker,Docker 就可以通过端口找到显示输出的地方,和linux系统共用显示接口。

  • 安装 xserver
sudo apt install x11-xserver-utils
  • 设置权限
# 允许所有用户访问显示接口
xhost +
# 只允许Docker用户访问显示接口 (两者选其一即可)
xhost +local:docker 
  • 运行Docker镜像时 设置环境变量
#共享本地unix端口
-v /tmp/.X11-unix:/tmp/.X11-unix           
#修改环境变量DISPLAY
-e DISPLAY=unix$DISPLAY 

那么在Docker中显示图像可以这样运行指令:

docker run -it -v /tmp/.X11-unix:/tmp/.X11-unix -e DISPLAY=unix$DISPLAY <image_name>



实例

我们现在使用一个最简单的例子:调用摄像头,进行实时显示 来实际操作下。因为既要调用摄像头又要实时显示画面,所以我们需要把上面的两条指令连接起来进行操作,指令如下:

docker run -it --rm --device=/dev/video0 -e DISPLAY=unix$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix whynot0/opencamrea:v1

其中 whynot0/opencamrea:v1 是我自己生成的一个Docker镜像,其作用就是:调用摄像头并进行实时显示。



参考资料

Docker容器运行GUI程序的配置方法-阿里云开发者社区
G03-Docker挂载设备及输出图像
https://www.ctolib.com/topics-133594.html

  • 5
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值