如何在 Docker 容器中启动 X11 图形界面程序

如何在 Docker 容器中启动 X11 图形界面程序

在使用 Docker 时,我们通常会发现,容器中的图形应用没法直接显示到宿主机的界面上。不过,我们可以通过共享 X11 的 Unix 套接字,让容器把显示数据传递给宿主机的 X11 服务器,从而在宿主机上显示容器应用的界面。本文将带你一步步实现这一操作,并提供一个便捷的脚本,帮助你快速启动带有图形界面的 Docker 容器。

懒人脚本

如果你希望一步到位启动 Docker 容器中的 X11 图形应用,可以使用下面的脚本。这段脚本将自动完成容器的创建、X11 权限设置、图形应用的安装和启动,并在使用结束后恢复 X Server 权限。

懒人脚本:启动 X11 Docker 容器并运行图形界面应用

#!/bin/bash# 开放宿主机的 X Server 权限
xhost +# 创建并启动容器,并运行 xclock 图形化程序
docker run -it \-v /tmp/.X11-unix:/tmp/.X11-unix \-e DISPLAY=$DISPLAY \--name x11-docker \ubuntu bash -c " \apt update && \apt install -y x11-apps && \xclock "# 恢复 X Server 权限
xhost -

脚本说明

  1. xhost +:首先临时开放宿主机的 X Server 访问权限,允许 Docker 容器连接到宿主机的 X11 服务器。
  2. docker run -it:创建并启动名为 x11-docker 的容器,挂载 X11 套接字,设置 DISPLAY 环境变量,并在容器中执行一系列命令。
  3. apt install -y x11-apps && xclock:在容器内安装 x11-apps 包,并运行 xclock 应用,显示一个图形化的时钟。
  4. xhost -:操作完成后关闭宿主机的 X Server 访问权限,确保系统安全。

运行这个脚本后,你应该会在宿主机的屏幕上看到容器中的 xclock 时钟界面。


操作步骤详解

以下是脚本的各个步骤背后的原理和设置的详细说明:

1. 临时开放宿主机的 X Server 权限

为了让容器能够访问宿主机的图形界面,我们需要用 xhost + 命令来开放 X Server 的访问权限:

xhost +

注意:开放 X Server 权限可能带来安全风险。完成操作后务必关闭权限,使用 xhost - 命令来恢复设置。

2. 创建容器并挂载 X11 套接字

接下来,我们使用 docker run 命令来创建一个新的 Docker 容器,并挂载 X11 套接字,这样容器就可以与宿主机共享显示数据。

docker run -it \-v /tmp/.X11-unix:/tmp/.X11-unix \-e DISPLAY=$DISPLAY \--name x11-docker \ubuntu bash -c "apt update && apt install -y x11-apps && xclock"

这里的关键参数包括:

  • -v /tmp/.X11-unix:/tmp/.X11-unix:将宿主机的 /tmp/.X11-unix 目录挂载到容器,让容器能够访问宿主机的 X11 套接字文件。
    • X11 套接字文件是什么?
      在 Linux 系统中,X11 是一种标准化的图形显示协议。宿主机上运行的 X Server 通常会在 /tmp/.X11-unix 目录下创建套接字文件(通常为 X0 文件),用于监听来自客户端的连接请求。这个套接字文件充当“中介”,负责将客户端应用的图形请求传递给 X Server,从而让客户端应用能够在图形界面中显示。
    • 通过将宿主机的 /tmp/.X11-unix 目录挂载到容器,容器中的应用可以直接与宿主机的 X Server 进行通信,从而实现在宿主机上显示容器的图形界面。
  • -e DISPLAY=$DISPLAY:传递宿主机的 DISPLAY 变量,使容器知道应将
  • ubuntu bash -c "... && xclock":在容器中运行一系列命令,包括更新包管理器、安装 x11-apps 包,并启动 xclock 应用程序。

3. 运行图形化应用

在容器中,我们通过以下命令启动了图形化的时钟应用 xclock

apt update
apt install -y x11-apps
xclock

xclock 是一个简单的图形化应用,方便测试 X11 转发的设置是否正确。运行该命令后,你应该会在宿主机的屏幕上看到一个实时更新的时钟。

4. 关闭 X Server 权限

操作完成后,我们用 xhost - 命令关闭宿主机的 X Server 访问权限:

xhost -

这样可以防止其他不可信的程序访问宿主机的显示系统,确保系统的安全性。


注意事项

  1. 安全性:临时开放 X Server 权限会带来一定的安全风险,所以建议在操作完成后关闭权限。可以通过在脚本末尾加入 xhost - 命令自动恢复权限设置。

  2. DISPLAY 变量:在部分系统中,DISPLAY 变量可能需要手动设置成 :0 或其他值。可以通过 echo $DISPLAY 命令查看当前系统的 DISPLAY 配置,确保正确传递给容器。

  3. 权限问题:确保 Docker 守护进程和容器用户对 /tmp/.X11-unix 目录有访问权限。如果遇到权限问题,可以尝试用 sudo 启动容器,或者手动调整 /tmp/.X11-unix 目录的权限。

  4. MacOS 用户提示:如果你使用的是 MacOS,直接使用上述方法可能无法实现图形界面的转发。因为 MacOS 不支持 X11 套接字文件共享,建议使用 XQuartz 等第三方工具实现类似功能。


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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Js — 定时器

有两种:setInterval 和 setTimeout 间隔时间单位为毫秒 setInterval 每隔指定的毫秒数重复执行一个函数或代码 开启定时器:setInterval(函数,间隔时间) 作用:每隔一段时间调用这个函数 注意:它不是立即执行&#x…

H5播放器EasyPlayer.js 流媒体播放器是否支持npm(yarn) install 安装?

EasyPlayer.js H5播放器是一款功能强大的H5视频播放器,它支持多种流媒体协议播放,包括WebSocket-FLV、HTTP-FLV、HLS(m3u8)、WebRTC等格式的视频流。它不仅支持H.264和H.265编码格式,还具备实时录像、低延时直播等功能…

前端刺客系列----Vue 3 入门介绍

目录 一.什么是 Vue 3? 二.Vue 3 的主要特性 三,Vue3项目实战 四.总结 在前端开发的世界里,Vue.js 作为一款渐进式的 JavaScript 框架,已成为许多开发者的首选工具。自从 Vue 3 发布以来,它带来了许多重要的改进和新特性&…

【论文复现】MSA+抑郁症模型总结(三)

📝个人主页🌹:Eternity._ 🌹🌹期待您的关注 🌹🌹 ❀MSA抑郁症模型 热门研究领域:情感计算的横向发展1. 概述2. 论文地址3. 研究背景4. 主要贡献5. 模型结构和代码6. 数据集介绍7. 性…

Linux 实验:日志的备份与恢复 xfs文件系统

添加一个新的硬盘,创建硬盘分区sdc1 设置文件系统格式xfs,提示安装xfsprogs,如果安装失败,在后缀加上--fix-missing直到安装完成为止 mkdir创建空目录data,将sdc1挂载到data,data是根目录下新建的目录&…

应对AI与机器学习的安全与授权管理新挑战,CodeMeter不断创新引领保护方案

人工智能(AI)和机器学习(ML)技术正在快速发展,逐渐应用到全球各类主流系统、设备及关键应用场景中,尤其是在政府、商业和工业组织不断加深互联的情况下,AI和ML技术的影响日益广泛。虽然AI技术的…

证书学习(六)TSA 时间戳服务器原理 + 7 个免费时间戳服务器地址

目录 一、简介1.1 什么是时间戳服务器1.2 名词扩展1.3 用时间戳标记顺序1.4 7 个免费TSA时间戳服务器地址(亲测可用)1.5 RFC 3161 标准二、时间戳原理2.1 时间戳服务工作流程2.2 验证工作流程2.3 举个例子2.4 时间戳原理总结三、代码实现3.1 curl 命令请求时间戳3.2 java 代码…

一文快速预览经典深度学习模型(一)——CNN、RNN、LSTM、Transformer、ViT

Hi,大家好,我是半亩花海。本文主要简要并通俗地介绍了几种经典的深度学习模型,如CNN、RNN、LSTM、Transformer、ViT(Vision Transformer)等,便于大家初探深度学习的相关知识,并更好地理解深度学…

如何运营Github Org

目录 前言 正文 关于分支保护 特别说明 如何在Windows环境下配置GitHub Desktop GPG签名? 推荐分支保护选择 关于good first issue 如何设置good first issue? 关于Project 尾声 🔭 Hi,I’m Pleasure1234🌱 I’m currently learni…

接收nVisual中rabbitmq数据不成功问题排查

rabbitmq服务部署成功的情况下,消息对接不成功一般原因为消息发送失败,发送失败大多数可能为global_settings表配置错误。下面从两个方面解决消息对接不成功问题。 1.数据是否成功发送 检查global_settings表中rabbitmq发送消息配置信息是否正确 #MQS…

二叉树的实现

一.树 1.1树的概念与结构 树是一种非线性数据结构,由有限个结点组成的具有层次关系的集合。树的根部位置就叫根结点,除根结点以外,其余的树被分为各个互不相交的集合。树的根系只能向下延伸不能向左右延伸。除根结点以外每个结点有且仅有一…

Python基础学习-03逻辑分支语句、循环

目录 1、记住逻辑关系 2、逻辑分支语句 3、for-loop循环 4、while-loop 5、break 和 continue 6、本节总结 1、记住逻辑关系 • 逻辑关系 1) True(真) 和 False(假) 2)逻辑关系有 and(与…

Spark中给读取到的数据 的列 重命名的几种方式!

目录 一、第一种 (withColumnRenamed) 二、第二种(toDF) 三、第三种( toDF(*tuple1) ) 四、 第四种(schema) 五、假如文件里自带有列名的情况(option) 一、第一种 (withColumnRenamed) 假设要把如下…

鸿蒙UI开发——实现环形文字

1、背 景 有朋友提问:您好关于鸿蒙UI想咨询一个问题 如果我想实现展示环形文字是需要通过在Text组件中设置transition来实现么,还是需要通过其他方式来实现。 针对这位粉丝朋友的提问,我们做一下解答。 2、实现环形文字效果 ❓ 什么是环形…

现场工程师日记-MSYS2迅速部署PostgreSQL主从备份数据库

文章目录 一、概要二、整体架构流程1. 安装 MSYS2 环境2. 安装postgresql 三、技术名词解释1.MSYS22.postgresql 四、技术细节1. 创建主数据库2.添加从数据库复制权限3. 按需修改参数(1)WAL保留空间(2)监听地址 4. 启动主服务器5.…

Rust-AOP编程实战

文章本天成,妙手偶得之。粹然无疵瑕,岂复须人为?君看古彝器,巧拙两无施。汉最近先秦,固已殊淳漓。胡部何为者,豪竹杂哀丝。后夔不复作,千载谁与期? ——《文章》宋陆游 【哲理】文章本是不加人工,天然而成的,是技艺高超的人在偶然间所得到的。其实作者所说的“天成”…

Spark的Standalone集群环境安装

一.简介 与MR对比: 概念MRYARNSpark Standalone主节点ResourceManagerMaster从节点NodeManagerWorker计算进程MapTask,ReduceTaskExecutor 架构:普通分布式主从架构 主:Master:管理节点:管理从节点、接…

SpringBoot整合Sharding-JDBC实现读写分离

SpringBoot整合Sharding-JDBC实现读写分离 Sharding-JDBC实现读写分离,记得先要实现数据库的主从结构先。 1、Sharding-JDBC 简介 Sharding-JDBC 是的分布式数据库中间件解决方案。Sharding-JDBC、Sharding-Proxy 和 Sharding-Sidecar(计划 中)是 3 款相互独立的…

几个docker可用的镜像源

几个docker可用的镜像源 &#x1f490;The Begin&#x1f490;点点关注&#xff0c;收藏不迷路&#x1f490; sudo rm -rf /etc/docker/daemon.json sudo mkdir -p /etc/dockersudo tee /etc/docker/daemon.json <<-EOF {"registry-mirrors": ["https://d…

数字时代企业的基本数据丢失预防策略

在当今的数字时代&#xff0c;数据丢失预防对企业的重要性怎么强调也不为过。了解与数据丢失相关的风险至关重要&#xff0c;因为人为错误和网络攻击等常见原因可能会产生严重后果。 实施有效的数据丢失预防策略&#xff08;例如安全协议、定期数据备份和员工培训&#xff09;…