Docker安装使用系列七之内部程序可视化

        基于Docker进行项目开发时,当需要在docker容器里运行一些qt图形界面的软件以及ros等,或者要调用摄像头,输出图像等等一些需求,这个时候需要解决这个Docker “可视化”的问题,注意这里不是网上一搜一大把的那种可视化容器和管理工具,下面对这种情况处理进行如下总结:

解决方法:         

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

具体操作:

1)首先,在主系统里运行

$ sudo apt-get install x11-xserver-utils
$ xhost +

这两句的作用是开放权限,允许所有用户,当然包括docker,访问X11 的显示接口

2)在启动docker容器时,添加选项如下:

 -v /tmp/.X11-unix:/tmp/.X11-unix            #共享本地unix端口
 -e DISPLAY=unix$DISPLAY                     #修改环境变量DISPLAY
 -e GDK_SCALE                                #我觉得这两个是与显示效果相关的环境变量,没有细究
 -e GDK_DPI_SCALE 

最终的启动命令就会长类似这样

$ docker run -d 
  -v /etc/localtime:/etc/localtime:ro 
  -v /tmp/.X11-unix:/tmp/.X11-unix 
  -e DISPLAY=unix$DISPLAY 
  -e GDK_SCALE 
  -e GDK_DPI_SCALE 
  --name xxx
  xxx

这样启动后的容器,运行有图形界面的程序就可以自由显示,和在本地显示一样了。需要注意的是,每次重新开机,需要在本机操作一次

xhost +

打开权限即可。

3)docker内部像运行QT GUI界面的话,则可以在运行时加上如下指令

docker run -it --net=host --env="DISPLAY" xxxx

参数解释:

--env="DISPLAY": 将主机的显示环境变量共享到容器;

--net=host:使用主机网络驱动程序运行容器;

4) 想要調用宿主機攝像頭

首先可以查看一下宿主機上存在哪些設備,在/dev路徑下

然後在運行時,通過配置device來做一個調用

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

参考链接:

1、Docker容器图形界面显示(运行GUI软件)的配置方法 - 走看看

2、如何在docker中可视化程序,包括安装qt程序

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值