Docker下运行GUI应用

2023-05-16

Docker本身的工作模式是命令行的,因为主要的使用场景可能是做服务器后端方面的比较多。但有时候我们会有在docker容器里运行一些图形界面的软件,比如使用ROS时候需要gazebo和rviz的可视化这时候就需要使用图形界面进行结果的显示。下面就做一些自己找到的一些解决方案。

原理

原理上可以把docker镜像看做一台没配显示器的电脑,程序可以运行,但是没地方显示。 而linux目前的主流图像界面服务X11又支持 客户端/服务端(Client/Server)的工作模式 。只要在容器启动的时候,将 『unix:端口』或『主机名:端口』共享给docker,docker 就可以通过端口找到显示输出的地方,和linux系统共用显示。这是大部分场景都可以使用的,但是目前的WSL2使用的是WSLg来进行图形界面的显示(使用过WSL2的应该知道,现在的WSL2可以直接在宿主机windows下直接显示界面)。WSLg主要是基于的win下的RDP远程服务器来进行图像的显示。那么我就主要介绍两种常见的场景:第一种是在虚拟机ubunt中Docker的gui应用的显示,第二种是WSL2中Docker的显示。

虚拟机中Docker应用的显示

我使用的虚拟机是ubuntu-20.04,在其中安装Docker。虚拟机和Docker的安装可以参考其它博文,安装完成之后,为了实验,直接使用Docker拉取最新的ubuntu镜像(ubuntu中安装ubuntu,套娃)。使用如下命令:

sudo docker pull ubuntu

这条命令会直接拉取最新的ubuntu镜像。然后是运行这个镜像(命令中的参数是最重要的):

sudo docker run -it -v /tmp/.X11-unix:/tmp/.X11-unix -e DISPLAY=unix$DISPLAY ubuntu:latest

其中主要注意命令后跟的-v和-e参数,下面进行介绍这两个参数的作用:

  • -v 是用来指定容器卷的映射,将容器映射到宿主机中,共享这个文件,这里类似于共享一下显示器

  • -e 是用来指定容器的环境变量,修改环境变量DISPLAY为宿主机的环境变量

运行上述命令之后,在宿主机中新开一个终端运行下面的命令:

xhost +

运行之后会输出access control disabled, clients can connect from any host。大致意思是允许所有的连接。最后为了验证可以正确的运行可以安装一个小的图形化应用如下:

sudo apt install x11-apps -y

运行完成之后,使用xclock命令可以显示一个钟表的图形。

WSL2中Docker中应用的显示

在早期的WSL版本可以使用上面的方法进行显示,但是目前的WSL2使用的是WSLg来进行图形的显示,也就是宿主机不需要安装X-11服务器就可以完成gui功能的显示,与上面命令不同的主要是运行容器命令的容器卷映射的不同。直接显示如下图:

也就是我运行命令之后,可以直接在win10系统界面中显示。

这里使用的WSL2是ubuntu-22.04,安装docker-desktop之后,还是直接拉取最新的ubuntu镜像。使用如下命令:

sudo docker pull ubuntu

运行命令有所不同:

sudo docker run -it -v /mnt/wslg/.X11-unix:/tmp/.X11-unix -e DISPLAY=unix$DISPLAY ubuntu:latest

参考网上的代码还可以使用如下形式的命令来进行wsl2中gui界面的显示(也更为推荐如下形式的代码)

sudo docker run -it -v /tmp/.X11-unix:/tmp/.X11-unix -v /mnt/wslg:/mnt/wslg -e DISPLAY=unix$DISPLAY ubuntu:latest

主要是容器卷的映射不同,使用的是/mnt/wslg文件下来进行映射的。其它和上述步骤一样。通过这样的步骤即可在win10下使用不同的Docker镜像,enjoy youself!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Docker下运行GUI应用 的相关文章

随机推荐

  • 程序员=加班??掌握时间才能掌握人生

    总是有些人一生中有无数作为 xff0c 而更多的人耗费一生的时间最终换来了不过四个字 死因不详 序言 近几年 xff0c 读了比较多的书 xff0c 涉猎也比较广泛 xff0c 经管 xff0c 哲学 xff0c 心理学 xff0c 成功学
  • Presto集群Web UI界面详解

    Presto Web UI 可以用来检查和监控Presto集群 xff0c 以及运行的查询 他所提供的关于查询的详细信息可以更好的理解以及调整整个集群和单个查询 Presto Web UI所展示的信息都来自于Presto系统表 当你进入Pr
  • 【好书推荐】《华为数据之道》

    数据技术要产生实际价值 xff0c 需要良好的数据治理体系保驾护航 最近华为出版了 华为数据之道 一书 xff0c 给出了非数字原生企业在数据管理方面的实战经验 xff0c 特别适合于面临数字化转型的企业管理者 数据从业者 一 整体框架 华
  • 【好书推荐】《Python编程:从入门到实践(第2版)》

    第二版是2020年底发布的 xff0c 第二版相比较第一版更新了不少新东西 不错的python入门书 xff0c 第一部分讲基础知识 xff0c 第二部分讲了三个实际的项目 xff1a 一个小游戏 xff0c 一个数据可视化程序 xff0c
  • 【小技巧】Navicat查看数据库密码

    一 导出链接 二 导出的时候一定要勾选导出密码 三 导出文件用notepad 打开 四 打开网址 将如下代码复制进去 打开这个网址 https tool lu coderunner 将如下PHP代码复制进去 span class token
  • 看《狂飙》读人生,致敬2023!

    作为2023年的第一篇博文 xff0c 我不想写代码 xff0c 我想谈谈最近看的 狂飙 xff0c 总结了十条哲理 xff0c 共勉 希望我们的2023 xff0c 未来的人生会更加出彩 01 你以为很好的关系 xff0c 其实也就那么回
  • MySQL生成排序序号RN

    有时因为业务的需求 我们需要在查询出的数据中加上排序序号 例 span class token keyword SQL span span class token keyword select span a span class token
  • MySQL实现row_number排序功能(不用函数)

    MySQL ROW NUMBER 函数为结果集中的每一行生成序列号 MySQL ROW NUMBER 从8 0版开始引入了功能 在使用8 0版之前的数据库时 往往也会用到排序逻辑 那我们如何在不使用ROW NUMBER 函数的情况下来实现排
  • 一文读懂【数据埋点】

    数据埋点是数据采集领域 xff08 尤其是用户行为数据采集领域 xff09 的术语 xff0c 指的是针对特定用户行为或事件进行捕获 处理和发送的相关技术及其实施过程 比如用户某个icon点击次数 观看某个视频的时长等等 数据分析是我们获得
  • Hive几个常用数学函数

    span class token number 1 span span class token punctuation span span class token comment round 四舍五入 span span class tok
  • ubuntu解决中文乱码

    1 查看当前系统使用的字符编码 locale LANG 61 en US LANGUAGE 61 en US LC CTYPE 61 34 en US 34 LC NUMERIC 61 34 en US 34 LC TIME 61 34 e
  • Python 中使用 Azure Blob 存储

    本文介绍如何使用适用于 Python 的 Azure 存储客户端库来上传 blob 你可以上传 blob xff0c 打开 blob 流并写入流 xff0c 或者上传带有索引标记的 blob Azure 存储中的 Blob 已组织成容器 必
  • 视频加速播放插件-Global Speed

    有时候我们觉得看视频的过程中视频播放的太慢了 xff0c 希望能够加快一点播放的速度 xff0c 谷歌浏览器里面有很多有意思的插件 例如Global Speed就可以控制视频播放的速度 1 打开谷歌浏览器 xff0c 输出商店扩展应用地址
  • 激光SLAM之图优化理论

    1 常用的两种优化方法介绍 SLAM问题的处理方法主要分为滤波和图优化两类 滤波的方法中常见的是扩展卡尔曼滤波 粒子滤波 信息滤波等 xff0c 熟悉滤波思想的同学应该容易知道这类SLAM问题是递增的 实时的处理数据并矫正机器人位姿 比如基
  • ROS常用命令合集

    一 创建 ROS 工作空间 1 启动 ROS roscore 2 创建工作环境 mkdir p catkin ws src cd catkin ws src catkin init workspace 3 编译 ROS 程序 cd catk
  • 嵌入式开发笔记——调试组件SEGGER_HardFaultHandle

    作者 xff1a zzssdd2E mail xff1a zzssdd2 64 foxmail com 一 前言 在使用Cortex M内核的MCU进行开发时 xff0c 有时候会因为对内存错误访问等原因造成程序产生异常从而进入HardFa
  • Oracle 知识篇+几种常见的关系型数据库产品发展史

    说明 xff1a 本文为几种常见的关系型数据库产品发展史的简要描述 xff0c 供RDBMS兴趣爱好者参考温馨提示 xff1a 如果本文有写的不对的地方或者需要改进的地方 xff0c 各位可以留言或私信我进行修改和升级哦 下表为几款RDBM
  • MoveIt编程实现机械臂自主避障运动

    Moveit在规划路径的时候考虑如何躲避障碍物的问题 xff0c Moveit可以实时的检测空间中的障碍物 xff0c 并规划处轨迹绕过障碍物 在场景中加入障碍物方式 在Moveit中 具有一个规划场景监听器的模块结构 xff0c 可以用来
  • 在ROS中基于颜色做简单的物体识别

    ROS无法直接进行图像处理 xff0c 需要借助于opencv xff0c 要使用cv bridge把ROS 的图像数据格式转为Opencv可以使用的数据格式 即是一个提供ROS和OpenCV库提供之间的接口的开发包 然后可以将opencv
  • Docker下运行GUI应用

    Docker本身的工作模式是命令行的 xff0c 因为主要的使用场景可能是做服务器后端方面的比较多 但有时候我们会有在docker容器里运行一些图形界面的软件 xff0c 比如使用ROS时候需要gazebo和rviz的可视化这时候就需要使用