docker中图形化界面的转发

文章目录

  • 一、 使用X11转发(适用于Linux系统)
        • 注意事项:
  • 二、使用VNC(适用于所有平台)
        • 优点:
  • 三、使用Xpra(无缝模式,适用于Linux和macOS)
        • 优点:
  • 四、使用X11转发到Windows(适用于Windows系统)
  • 总结

在Docker中默认情况下是没有图形化界面的,因为Docker主要是为无头(headless)环境设计的。如果想在Docker容器中运行图形化程序,并且希望这些程序的窗口显示在宿主机上,可以通过以下几种方式实现。

一、 使用X11转发(适用于Linux系统)

Linux系统中通常使用X11作为显示服务器,可以通过X11转发来将容器内的图形化程序窗口显示到宿主机上

  • 1.允许宿主机的X11连接
    • 在宿主机上执行以下命令,允许X11接受来自Docker容器的连接
xhost +
  • 注意:xhost + 会允许任何客户端访问宿主机的X服务器,可能存在安全风险。为了更安全的操作,可以指定特定的主机,例如:
xhost +local:docker
  • 2.运行Docker容器并设置DISPLAY变量
    • 在运行容器时,需要将宿主机的X11 socket目录映射到容器内,并设置DISPLAY变量,指定宿主机的X显示服务
docker run -it --rm \   -e DISPLAY=$DISPLAY \   -v /tmp/.X11-unix:/tmp/.X11-unix \   my_ros_image
  • 参数说明:
    • -e DISPLAY=$DISPLAY:将宿主机的DISPLAY环境变量传递给Docker容器,使容器内程序知道应该将窗口显示在哪个屏幕上。
    • -v /tmp/.X11-unix:/tmp/.X11-unix:将宿主机的X11 socket目录映射到容器内,以便容器能够与宿主机的X服务器通信。
  • 3. 启动图形化程序
    • 进入容器后,启动图形化程序(如rvizgazebo等),它的窗口将显示在宿主机的桌面上。
注意事项:
  • 容器和宿主机的X服务器之间需要权限匹配,否则可能出现“拒绝连接”的错误。
  • xhost +允许所有客户端访问X服务器,可能有安全隐患。如果在多用户系统中使用,建议启用xhost +local:这种更安全的方式。

二、使用VNC(适用于所有平台)

如果你使用的是Windows、macOS或你不想依赖X11转发,可以通过VNC(虚拟网络计算)在容器中运行图形化界面,并通过VNC客户端在宿主机上访问图形化界面。

  • 1.在Docker镜像中安装VNC服务
    • 首先需要在Docker镜像中安装VNC服务器和一个桌面环境,例如XFCE4。可以在Dockerfile中进行如下配置:
FROM ubuntu:18.04
RUN apt-get update && apt-get install -y \xfce4 \xfce4-goodies \tightvncserver \&& apt-get clean# 配置VNC启动脚本
RUN mkdir ~/.vnc && \echo "xfce4-session &" > ~/.vnc/xstartup && \chmod +x ~/.vnc/xstartupCMD ["vncserver", ":1", "-geometry", "1280x1024", "-depth", "24"]
  • 2.启动Docker容器
    • 构建镜像并运行容器:
docker build -t my_vnc_ros_image .
docker run -p 5901:5901 my_vnc_ros_image
  • 这样会将容器中的VNC服务映射到宿主机的5901端口。
  • 3.在宿主机上使用VNC客户端连接
    • 使用VNC客户端(如RealVNCTigerVNC),连接到宿主机的localhost:5901,你就可以看到容器内的图形化界面。
优点:
  • 这种方式跨平台(Windows、macOS、Linux)都可用,不依赖宿主机的显示系统(如X11)。
  • VNC可以提供一个完整的虚拟桌面环境。

三、使用Xpra(无缝模式,适用于Linux和macOS)

Xpra是一种“无缝”远程桌面工具,它允许将容器内的图形化应用显示为宿主机上的独立窗口,而不需要整个桌面环境。相比VNC,Xpra更轻量,且在Linux和macOS上使用较为方便。

  • 1.在Docker镜像中安装Xpra
    • 在Dockerfile中添加安装Xpra的指令:
RUN apt-get update && apt-get install -y xpra
  • 2.启动Xpra服务器
    • 运行容器时,启动Xpra服务器并映射端口:
docker run -it --rm \-e DISPLAY=:14 \-p 14500:14500 \my_xpra_ros_image xpra start :14 --bind-tcp=0.0.0.0:14500 --no-daemon
  • 3.在宿主机上安装Xpra客户端
    • 安装Xpra客户端后,运行以下命令连接到容器:
xpra attach tcp:localhost:14500
  • 此时可以在宿主机上以窗口形式看到容器中的图形化程序。
优点:
  • Xpra是无缝的,不像VNC那样需要虚拟桌面,它可以在宿主机上显示为独立的窗口。
  • 支持Linux和macOS,适合图形化应用的开发和调试。

四、使用X11转发到Windows(适用于Windows系统)

如果你使用的是Windows,可以安装X11服务器(如Xming或VcXsrv)来接收Docker容器的图形化输出。

  • 1.安装Xming或VcXsrv
    • 下载并安装Xming或VcXsrv,确保其在运行并且监听X11连接。
  • 2.配置环境变量
    • 在Windows的CMDPowerShell中,找到Xming/VcXsrv的IP地址,通常是localhost或者172.17.0.1
    • 将环境变量DISPLAY设置为该IP地址加上:0(例如DISPLAY=172.17.0.1:0)。
  • 3.运行Docker容器并设置DISPLAY
    • 使用类似于Linux的X11转发方法,将DISPLAY和X11 socket传递给容器:```
docker run -it --rm \-e DISPLAY=172.17.0.1:0 \-v /tmp/.X11-unix:/tmp/.X11-unix \my_ros_image
  • 4.运行图形化程序
    • 图形化程序的窗口应该会显示在Windows的桌面上。

总结

  • X11转发:适合Linux和macOS系统,依赖宿主机的X11服务器。
  • VNC:跨平台,适合需要完整桌面环境的场景。
  • Xpra:轻量且无缝显示,适合Linux和macOS,独立窗口显示。
  • Windows X11转发:需要Xming或VcXsrv等工具。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1539746.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

openssl-AES-128-CTR加解密char型数组分析

本文章通过对一个unsigned char*类型的数据做简单的加解密操作来学习如何使用openssl库函数。 openssl为3.0.0&#xff0c;对此前版本的很多函数都不兼容。 加解密源码 #include <openssl/evp.h> #include <openssl/err.h> #include <string.h> #include …

手机实时提取SIM卡打电话的信令和声音-新的篇章(一、可行的方案探讨)

手机实时提取SIM卡打电话的信令和声音-新的篇章(一、可行的方案探讨) 前言 前面的篇章和方案中&#xff0c;我们说到可以使用蓝牙、USB等方式把声音从手机中提取出来&#xff0c;但对于SIM通话&#xff0c;因为手机进行了层层封锁的原因&#xff0c;实时的通话语音数据和打通/…

2017年国赛高教杯数学建模A题CT系统参数标定及成像解题全过程文档及程序

2017年国赛高教杯数学建模 A题 CT系统参数标定及成像 CT(Computed Tomography)可以在不破坏样品的情况下&#xff0c;利用样品对射线能量的吸收特性对生物组织和工程材料的样品进行断层成像&#xff0c;由此获取样品内部的结构信息。一种典型的二维CT系统如图1所示&#xff0c…

【Elasticsearch系列十四】Elasticsearch

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

Linux 中的 Screen 命令详解

目录 前言1. 什么是 Screen 命令2. Screen 命令的主要功能3. Screen 命令的安装4. Screen 的基础使用4.1 启动一个新的 Screen 会话4.2 恢复一个断开的 Screen 会话4.3 退出一个 Screen 会话 5. Screen 命令的常用参数5.1 -S&#xff1a;指定会话名称5.2 -r&#xff1a;恢复会话…

同一个单元格内包含标签和文本框

<!DOCTYPE html> <html> <head> <title>单元格内包含标签和文本框</title> <style> /* 可选的CSS样式&#xff0c;用于美化表格 */ table { width: 50%; /* 设置表格宽度为页面宽度的50% */ border-collapse: collapse; /* 合并…

LabVIEW软件维护的内容是什么呢?

LabVIEW软件维护涉及多个方面&#xff0c;确保程序的正常运行和长期稳定性。维护内容包括以下几个方面&#xff1a; 1. Bug修复 在开发和运行过程中&#xff0c;可能会出现各种软件问题或缺陷&#xff08;bugs&#xff09;。维护工作之一就是识别这些问题并通过修复程序中的代…

网络高级day01(Modbus 通信协议)

目录 1》modbus分类 1> Modbus RTU 2> Modbus ASCLL 3> Modbus TCP 2》Modbus TCP的特点 3》Modbus TCP协议 1> 报文头&#xff08;一共7个字节&#xff09; 2> 寄存器 3> 功能码 4> 数据 01H 功能码分析 05H 功能码分析 0FH 功能码分析 1》modbus…

【5】AT32F437 OpenHarmony轻量系统移植教程(2)

开源地址&#xff1a;https://gitee.com/AT32437_OpenHarmony 学习本文档的意义 1.学习移植OpenHarmony轻量系统到AT32全系列mcu上&#xff0c;本文档移植的具体型号为AT32F437ZMT7 2.学习OpenHarmony轻量系统开发 3.适配vprintf, vfprintf, printf, snprintf 和sprintf 1…

【新手上路】衡石分析平台系统管理手册-安全管理

安全策略​ 安全策略是针对系统中所有用户进行的安全控制&#xff0c;只有系统管理员可以设置。 打开设置->安全策略页面。 登录安全策略​ 启用复杂密码​ 启用之后&#xff0c;用户修改密码时&#xff0c;必须输入符合要求的复杂密码。 密码90天失效​ 密码的有效期…

UnLua扩展C++函数和蓝图自定义事件

一、通过BlueprintImplementableEvent标记扩展C函数 1、 这个标记表示C不需要实现&#xff0c;让蓝图/Lua重写。 2、首先在C中将LuaImp函数标记为BlueprintImplementableEvent&#xff0c;不需要实现&#xff0c;然后再GetIndex中调用该函数。 MyBaseActor.h UFUNCTION(Bluepr…

任务书与开题报告的区别与联系:如何让二者相辅相成

AIPaperGPT&#xff0c;论文写作神器~ https://www.aipapergpt.com/ 大家好&#xff01;今天咱们聊聊论文写作过程中两个让人又爱又恨的关键步骤&#xff1a;任务书和开题报告。 这两兄弟可是你毕业路上的第一关卡&#xff0c;搞不定它们&#xff0c;你后面别说论文了&#…

Kafka集群扩容(新增一台kafka节点)

kafka集群扩容、kafka topic迁移 现有环境 IP组件角色192.168.17.51kafka01broker1192.168.17.52kafka02broker2192.168.17.53kafka03broker3 扩容之后环境 IP组件角色192.168.17.51kafka01broker1192.168.17.52kafka02broker2192.168.17.53kafka03broker3192.168.17.54ka…

letterSpacing导致TextView文本被截断

一.背景介绍 &#xff08;Android10 11目前有这个问题 Android15似乎有新的属性 但是没有可用的环境 没有验证&#xff09; 简介 android:maxLines"1" android:textAlignment"viewStart" android:letterSpacing"0.04" 多个属性同时作用情况下 …

基于C语言+SQL Server2008实现(控制台)图书管理系统

第1章 概述 1.1项目背景 随着科技的发展&#xff0c;尤其是计算机技术的迅猛发展&#xff0c;图书馆管理的问题从以往的人工管理&#xff0c;到现在的电脑化&#xff0c;系统化&#xff0c;是对图书馆管理方法的质的飞跃&#xff0c;这些技术不仅让图书馆管理变得更加方便、快…

用代码生成代码之Roslyn-C#代码分析和生成工具

Roslyn 是什么&#xff1f; Roslyn是微软公司开源的.NET编译器&#xff0c;它提供了丰富的代码分析API&#xff0c;并支持C#和Visual Basic代码的编译。 Roslyn 的主要功能 编译器扩展&#xff1a; 使用Roslyn可以创建自定义的编译器扩展&#xff0c;如语法分析器、重构器、…

Redis主从架构原理

我们使用redis的时候为了预防单点故障&#xff0c;通常要做高可用设计&#xff0c;redis主从架构就是一种防止redis主节点宕机启用从节点的高可用设计方案。下面我们看一下redis主从架构的设计原理。 Redis 主从架构 单机的 Redis&#xff0c;能够承载的 QPS 大概就在上万到几…

力扣 16.最接近的三数之和

文章目录 题目介绍解法 题目介绍 解法 设 snums[i]nums[j]nums[k]&#xff0c;为了判断 s 是不是与 target 最近的数&#xff0c;我们还需要用一个变量 minDiff 维护 ∣s−target∣ 的最小值。分类讨论&#xff1a; 如果 starget&#xff0c;那么答案就是 s&#xff0c;直接返…

网络-内核是如何与用户进程交互

1、socket的直接创建 net/socket.cSYSCALL_DEFINE3(socket, int, family, int, type, int, protocol) {...retval sock_create(family, type, protocol, &sock);... }int sock_create(int family, int type, int protocol, struct socket **res) {return __sock_create(cu…

英飞凌PSoC4000T的GPIO中断示例工程

关于PSoC4000T的初步介绍见:英飞凌MCU第五代高性能CAPSENSE技术PSoC4000T_psoc 4000t-CSDN博客 下面这个工程,在modustoolbox中可编译、下载到开发板、debug调试。 编译时会用到mtb_shared这个库: 已经pdl这个periperal driver library库: