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

环境

Docker 挂载摄像头

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

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

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

Docker 显示图像

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

sudo apt install x11-xserver-utils
# 允许所有用户访问显示接口
xhost +
# 只允许Docker用户访问显示接口 (两者选其一即可)
xhost +local: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

Docker 容器挂载摄像头并显示图像相关推荐

  1. Docker容器挂载

    docker的理念:将应用和环境打包成一个镜像!通过镜像启动容器运行 问题:在容器中存储的程序数据是需要持久化的,不能容器删了数据也随之删除.比如,安装一个MySQL容器,在其中存储了大量数据,结果把 ...

  2. Python FastApi:快速建立docker容器/挂载共享文件夹/导入导出

    一.目的 a.快速把原有fastapi代码部署到docker,让docker在server运行. b.不涉及docker深入设置. c.使用python第三方lib少或简单. 二.步骤 ps:请提前安 ...

  3. docker容器挂载权限问题 导致日志文件不生成

    1.出现问题 新项目采用springboot2.3之后的自带打包方式打包成功后,启动发现目录文件里面没有日志生成 logs 文件路径下没有日志生成. docker-compose.yaml 目录挂载如 ...

  4. 在docker容器中创建用户组和用户,并且多用户共用一个anaconda环境

    转载自:https://www.cnblogs.com/devilmaycry812839668/p/13760815.html 在docker容器中创建用户组和用户,并且多用户共用一个anacond ...

  5. 如何在Docker容器中挂载主机目录

    本文翻译自:How to mount a host directory in a Docker container I am trying to mount a host directory into ...

  6. docker容器修改开机启动服务器,docker-修改容器挂载目录的3种方法小结

    方式一:修改配置文件(需停止docker服务) 1.停止docker服务 systemctl stop docker.service(关键,修改之前必须停止docker服务) 2.vim /var/l ...

  7. elasticsearch docker无法挂载_Docker 容器监控方案怎么选?看看这套开源方案

    来自:简书,作者:__七把刀__ 链接:https://www.jianshu.com/p/abfa502e43a6 随着线上服务的全面docker化,对docker容器的监控就很重要了.SA的监控系 ...

  8. Docker 容器文件拷贝及目录挂载

    Docker 容器文件拷贝及目录挂载 10.Docker:容器文件拷贝 目标: 掌握文件拷贝命令 将linux宿主机中的文件拷贝到容器内可以使用命令: # docker cp 需要拷贝的文件或目录 容 ...

  9. docker文件过大,Docker容器引擎,迁移/var/lib/docker/到本机其它挂载分区或远程主机的某个分区。docker迁移

    docker文件过大,Docker容器引擎,迁移/var/lib/docker/到本机其它挂载分区或远程主机的某个分区.docker迁移. 0. 迁移前检查镜像和容器 docker images 和d ...

最新文章

  1. lt view gt android,RecyclerView的linearLayoutManager.findViewByPosition()问题
  2. EasyDarwin开源社区 短视频拍摄项目Github地址
  3. linux查看占用内存最多的程序
  4. 1130 Infix Expression (25 分)【难度: 一般 / 知识点: 中序遍历】
  5. Shiro <shiro:hasPermission >标签不生效,shiro权限不生效原因
  6. UNIX再学习 -- 可重入函数和 SIGCHLD 语义
  7. 唯一标识 微信小程序_微信小程序获取用户唯一标识(不用授权)
  8. 关于启明星辰IDS无法CONSOLE连接
  9. spring vaadin_在Spring Boot中使用Vaadin的简介
  10. 亲历漏洞研究最让人难受的地方:看到打补丁版本,才知漏洞一直近在眼前(详述)...
  11. axure中怎么把图片变圆_怎么将图片中的文字提取出来?收下这份识别教程
  12. 面向对象之封装的成本价值
  13. Oracle临时表GLOBAL TEMPORARY TABLE
  14. 最新正版nero7序列号注册码
  15. 数据库左连接、右连接
  16. 从零快速搭建自己的爬虫系统
  17. 浙江大学 工程伦理 第二章单元测试答案
  18. 华清远见java学习心得
  19. 去掉Word2007文档眉头的横线
  20. uefi怎么念_UEFI是什么,看完您就全明白了

热门文章

  1. debain系统code-server云IDE开机启动脚本
  2. 二、达尔文机器人开发指南(针对中国机器人比赛、华北五省机器人比赛)-----达尔文基础使用说明
  3. BGP 选路规则实验
  4. 每日英语--Week14
  5. office2003下载路径
  6. linux超频软件,GreenWithEnvy 0.11 发布,Linux上NVIDIA GPU的超频工具
  7. 小缘你咋学的Android?为啥我们不一样~
  8. 计算机类短视频论文,论新媒体环境下短视频平台的发展--以秒拍为例.docx
  9. ADC芯片——CS1237的使用
  10. java JXL读取Excel 错误: jxl.read.biff.BiffException: Unable to recognize OLE stream