Linux docker(03)可使用GPU渲染的x11docker实战总结
该系列文章的目的旨在之前的章节基础上,使用x11docker构建一个可以使用GPU的docker容器。该容器可以用于3D图形渲染/XR 等使用GPU渲染的程序调试和运行。
0 why docker
为什么非要用x11docker,而不是其他的docker呢?
因为一般的docker是不能够使用GPU来渲染3D图形化程序的,而且即便是可以运行3d图形化程序,默认也是使用CPU而不是GPU的。也就是说Docker本身是不提供允许使用图形用户界面运行应用程序的显示服务器。而x11docker 填补了空白。它运行一个X 显示服务器并将其提供给容器。X 服务器可以从主机或图像x11docker/xserver的容器中运行。此外 x11docker 还进行了一些安全设置以增强容器隔离并避免 X 安全漏洞。这允许沙盒环境很好地保护主机系统免受可能的恶意或错误软件的侵害。
1 了解和使用x11docker基础
@1 x11docker的github网址-> GitHub - mviereck/x11docker
@2 下载x11docker专属镜像。x11docker的镜像需要单下载,因为最后要使用x11docker命令来执行,不可以是任意的镜像,而是在docker hub网站上 以x11docker为前缀命名的docker镜像,检索链接如下(根据自己的实际需求下载镜像即可xfce、xserver、lxde等等。。。):
https://hub.docker.com/search?q=x11docker
@3 下载x11docker,使用如下命令:
curl -fsSL https://raw.githubusercontent.com/mviereck/x11docker/master/x11docker | sudo bash -s -- --update
@4 测试x11docker
命令有了,镜像也有了,接下来就可以执行命令看看效果了,比如执行以下命令:
x11docker --desktop --size 320x240 x11docker/lxde
就会直接显示桌面程序如下所示:

这里的desktop命令表示桌面版程序,--size表示显示窗口的大小。
2 x11docker构建自定义的GPU运行环境
2.1 镜像操作
#1 下载镜像
$docker pull x11docker/xfce#2 运行容器并设置好共享文件夹
$docker run -it -v /home/share/:/home/share/ --name devt3 x11docker/xfce /bin/bash#3 开始apt update 然后按需install各种软件,执行结束后exit
$apt update
$apt install ...#4 commit操作,将容器压缩到镜像中,这样就可以docker push提交到自己的服务器了
$docker commit c83e26ce754e x11docker/xfce:v20 //将container容器直接输出到image镜像中。
这里下载好母板镜像后 根据自己的需要install各种软件,最后exit退出并将打包好的镜像提交到自己的服务器中。
2.2 直接运行镜像导致黑屏,怎么解?
使用Dockerfile编译出可运行的x11docker镜像。这里注意,经过安装软件后的镜像无法直接再用x11docker 运行,会黑屏,这时候怎么办呢?使用Dockerfile编译出一个特殊版本 x11docker/xfce:v20。这里使用了一个Dockerfile,内容如下
# x11docker/xfce
#
# Run XFCE desktop in docker.
# Use x11docker to run image.
# Get x11docker from github:
# https://github.com/mviereck/x11docker
#
# Examples:
# - Run desktop:
# x11docker --desktop x11docker/xfce
# - Run single application:
# x11docker x11docker/xfce thunar
#
# Options:
# Persistent home folder stored on host with --home
# Shared host folder with --share DIR
# Hardware acceleration with option --gpu
# Clipboard sharing with option --clipboard
# ALSA sound support with option --alsa
# Pulseaudio sound support with option --pulseaudio
# Language setting with --lang [=$LANG]
# Printing over CUPS with --printer
# Webcam support with --webcam
#
# Look at x11docker --help for further options.FROM /x11docker/xfce:v20RUN apt-get update && apt-mark hold iptables && \env DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \dbus-x11 \psmisc \xdg-utils \x11-xserver-utils \x11-utils && \env DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \xfce4 && \env DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \libgtk-3-bin \libpulse0 \mousepad \xfce4-notifyd \xfce4-taskmanager \xfce4-terminal && \env DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \xfce4-battery-plugin \xfce4-clipman-plugin \xfce4-cpufreq-plugin \xfce4-cpugraph-plugin \xfce4-diskperf-plugin \xfce4-datetime-plugin \xfce4-fsguard-plugin \xfce4-genmon-plugin \xfce4-indicator-plugin \xfce4-netload-plugin \xfce4-places-plugin \xfce4-sensors-plugin \xfce4-smartbookmark-plugin \xfce4-systemload-plugin \xfce4-timer-plugin \xfce4-verve-plugin \xfce4-weather-plugin \xfce4-whiskermenu-plugin && \env DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \libxv1 \mesa-utils \mesa-utils-extra && \sed -i 's%<property name="ThemeName" type="string" value="Xfce"/>%<property name="ThemeName" type="string" value="Raleigh"/>%' /etc/xdg/xfce4/xfconf/xfce-perchannel-xml/xsettings.xml
RUN apt-get install libxcb-xkb-dev
使用如下命令编译Dockerfile:
$docker build -f Dockerfile -t x11docker/xfcetestXXX
这样使用x11docker 运行该镜像就不会有问题了。
2.3 窗口显示无法使用GPU,怎么配置都不行,怎么办?
在调试时遇到一个新问题:使用这几个参数 要么使用--gpu后就只能全屏显示,要么无法显示,要么即便可以显示但无法使用GPU,一个黑屏卡在那里不动。后来仔细分析了下这几个参数。
- --gpu: 使用gpu加速
- --desktop:桌面版
- --xorg:在X环境中使用的选项
并未发现哪里不妥,正常情况是--desktop和 --gpu肯定是够了,但就是显示不正确。后来对x11docker/xserver这个镜像做了一些了解,发现有了x11docker/xserver这个镜像,x11docker可使用的扩展参数就多了,有--kwin --nxagent --weston --weston-xwayland --xephyr --xorg --xpra --xpra-xwayland --xvfb --xwayland。猜想weston的一些参数可解决该问题,于是尝试pull镜像x11docker/xserver,这时再使用如下命令就不会有问题了。详细命令如下:
$docker pull x11docker/xserver
$sudo x11docker --desktop x11docker/xfcetestXXX --gpu --share /home/share
这样就可以在窗口程序中直接使用GPU了。大功告成。
相关文章:
Linux docker(03)可使用GPU渲染的x11docker实战总结
该系列文章的目的旨在之前的章节基础上,使用x11docker构建一个可以使用GPU的docker容器。该容器可以用于3D图形渲染/XR 等使用GPU渲染的程序调试和运行。 0 why docker 为什么非要用x11docker,而不是其他的docker呢? 因为一般的docker是不…...
【Linux操作系统】【综合实验一 Linux操作基础】
文章目录一、实验目的二、实验要求三、实验内容四、实验报告要求一、实验目的 要求掌握Linux基础操作,熟悉Linux行界面,并明白操作的原理以及目的;熟悉Linux系统环境。 二、实验要求 通过这个第一阶段实验,要求掌握以下操作与相…...
关于监控服务器指标、CPU、内存、警报的一些解决方案
文章目录关于监控服务器指标、CPU、内存、警报的一些解决方案Prometheus Grafana 配置 IRIS / Cach 监控服务器Prometheus简介特点架构图Grafana简介特点配置流程自定义Prometheus接口定义配置 Exporter 监控服务器系统资源简介配置流程使用 Alertmanager报警简介配置流程基于…...
vue3全家桶技术栈基础(一)
在认识vue3全家桶之前,先简单回顾一下vue2的全家桶 一.在vue2中,全家桶技术栈 技术栈: vue2 vue-cli vuex3vue-router3webpack elementUI 1.vue-cli 脚手架构建vue项目,CLI 服务是构建于 webpack 和 webpack-dev-server构建快速生成一个vue2的开发项…...
群晖-第2章-设置HTTPS访问
群晖-第2章-设置HTTPS访问 本章介绍如何通过HTTPS访问群晖,前置要求是完成群晖-第1章-IPV6的DDNS中的内容,可以是IPV4也可以是IPV6,或者你有公网IP,直接添加DNS解析也可以。只要能通过域名访问到nas就行。 本文参考自群晖添加SS…...
005 利用fidder抓取app的api,获得股票数据
一、下载安装fidder 百度搜索fidder直接下载,按提示安装即可。 二、配置fidder 1. 打开fidder,选择tools——options。 2. 选择HTTPS选项卡,勾选前三项,然后点击右侧【actions】,选择【trust root certificate】&a…...
京东测试进阶之路:初入测试碎碎念篇
1、基本的测试用例设计方法 基本的测试用例设计方法(边界值分析、等价类划分等)。 业务和场景的积累,了解测试需求以及易出现的bug的地方。 多维角度设计测试用例(用户、业务流程、异常场景、代码逻辑)。 2、需求分析 …...
华为OD机试 - 乘积最大值(JavaScript) | 机试题+算法思路+考点+代码解析 【2023】
乘积最大值 题目 给定一个元素类型为小写字符串的数组 请计算两个没有相同字符的元素长度乘积的最大值 如果没有符合条件的两个元素返回0 输入 输入为一个半角逗号分割的小写字符串数组 2 <= 数组长度 <= 100 0 < 字符串长度 <= 50 输出 两个没有相同字符的元…...
Java并发知识点
文章目录1. start()和run()方法的区别?2. volatile关键字的作用?使用volatile能够保证:防止指令重排3. sleep方法和wait方法有什么区别?sleep()方法4. 如何停止一个正在运行的线程?方法一:方法二࿱…...
前端 ES6 环境下 require 动态引入图片以及问题
前端 ES6 环境下 require 动态引入图片以及问题require 引入图片方式打包体积对比总结ES6 环境中,通过 require 的方式引入图片很方便,一直以来也没有出过什么问题,后来项目中,需要动态引入图片。 require 动态引入也容易实现&am…...
PCL 欧氏聚类分割
文章目录 一、应用背景1、点云分割算法的属性2、点云分割的挑战二、实现过程三、主要函数及代码实现1、主要函数2、核心代码3、效果实现四、参考文献一、应用背景 1、点云分割算法的属性 1)鲁棒性,比如树木是具有与汽车相区别的特征的,当点云数据的特征数量增加时,分割算…...
一台服务器最大能支持多少条TCP连接
一、一台服务器最大能打开的文件数 1、限制参数 我们知道在Linux中一切皆文件,那么一台服务器最大能打开多少个文件呢?Linux上能打开的最大文件数量受三个参数影响,分别是: fs.file-max (系统级别参数)&am…...
Teradata退出中国,您可以相信中国数据库!
继Adobe、Tableau、Salesforce之后,2023年2月15日,数仓软件巨头Teradata宣布将逐步结束在中国的直接运营。数仓界的“黄埔军校”仓皇撤出中国市场给出的理由非常含蓄:Teradata对中国当前和未来商业环境的慎重评估,我们做了一个艰难…...
markdown组合数学公式
markdown组合数学公式 $C_n^m$CnmC_n^mCnm $A_n^m$AnmA_n^mAnm $$\binom{m}{nm1}$$(mnm1)\binom{m}{nm1}(nm1m) $${m\choose nm1}$$(mnm1){m\choose nm1}(nm1m)...
Golang实践录:一个字符串比较示例
本文介绍两个含中文的字符串且针对相同位置字符的比较,给出实现代码。 起因 某工程需将接收的字符串和数据库里的指定字段值对比,该字符串含中文,两者允许个别字符有差异,差异数量3及以下的,认为相同。 字符串默认用…...
Linux后台开发工具箱-葵花宝典
目录目录 11. 前言 52. 脚本类工具 52.1. 双引号和单引号 52.2. 环境变量和变量 52.3. sed命令-字符串文本操作 62.4. sed和awk使用外部变量 62.5. awk 应用 62.5.1. awk给外部变量赋值 62.5.2. awk 多字符串分割 72.6. 日期操作 72.7. 设置shell模式 82.8. 设置shell提示 82.9…...
http的请求上下文
1.引入: 上下文是指HTTP框架为每个HTTP请求所准备的结构体。 HTTP框架定义的这个上下文是针对于HTTP请求的, 而且一个HTTP请求对应于每一个HTTP模块都可以有一个独立的上下文结构体(并不是一个请求的上下文由所有HTTP模块共用) 。…...
【MySQL】MySQL表的增删改查(进阶)
✨个人主页:bit me👇 ✨当前专栏:MySQL数据库👇 ✨算法专栏:算法基础👇 ✨每日一语:悟已往之不谏,知来者之可追。实迷途其未远,觉今是而昨非。 目 录🎄一. 数…...
C++ Primer Plus习题及答案-第十八章
习题选自:C Primer Plus(第六版) 内容仅供参考,如有错误,欢迎指正 ! C decltype和返回类型后置 左右值引用和移动语义 C11 新的类功能 C11 Lambda表达式 C11 包装器function 复习题 1. 使用用大括号括起的初始化列表语法重写下述代码。重写后…...
Redis事务控制
1.Redis事务控制的相关命令 命令名作用MULTI表示开始收集命令,后面所有命令都不是马上执行,而是加入到一个队列中。EXEC执行MULTI后面命令队列中的所有命令。DISCARD放弃执行队列中的命令。WATCH“观察“、”监控“一个KEY,在当前队列外的其…...
ALIGN vs CLIP:哪个更适合你的多模态项目?详细对比与选型指南
ALIGN vs CLIP:多模态模型选型实战指南 当你在构建一个需要同时理解图像和文本的AI系统时,ALIGN和CLIP这两个名字一定会频繁出现。作为2023年最炙手可热的多模态模型,它们都能将视觉和语言映射到同一个语义空间,但设计哲学和适用场…...
OpenClaw硬件监控方案:Qwen3-14B预警系统异常状态
OpenClaw硬件监控方案:Qwen3-14B预警系统异常状态 1. 为什么需要硬件监控自动化 去年夏天,我的开发机因为显卡过热导致系统崩溃,丢失了整整两天的训练进度。当时我正在跑一个重要的实验,突然黑屏的瞬间让我意识到——硬件监控不…...
C语言变量与数据类型在嵌入式开发中的核心要点
1. C语言变量与数据类型基础解析作为一名在嵌入式领域摸爬滚打多年的工程师,我深知变量和数据类型是C语言编程的基石。每次带新人时,发现80%的基础错误都源于对这两个概念理解不透彻。C语言作为静态类型语言,要求每个变量都必须明确指定类型&…...
Unity3D实战:从零构建竖屏飞机大战游戏
1. 竖屏游戏的基础设置 第一次打开Unity时,默认是横屏模式。我们需要做的第一件事就是把游戏改成竖屏。这个操作看似简单,但很多新手容易忽略几个关键点。在Game窗口右上角找到分辨率设置,点击加号新建一个预设。这里要特别注意选择"Asp…...
C/C++标准库解析:从原理到实践
1. C/C 标准库的本质与标准化过程作为一名长期从事系统开发的程序员,我经常遇到新手对标准库的困惑:这些看似"凭空出现"的函数和类到底从何而来?让我们从最基础的概念开始拆解。C和C标准库的本质是一套经过严格定义的编程接口规范。…...
M5ROTATE8库详解:8路旋转编码器I²C驱动与固件V2优化
1. 项目概述M5ROTATE8 是一款专为 M5Stack 生态中M5Unit-8Encoder(官方型号名:8ROTATE)模块设计的 Arduino C 库。该模块集成了8 路独立旋转编码器(Rotary Encoder)、8 个独立按键(Push Button)…...
Python逆向工程实战:如何从pyinstaller打包的.exe文件中找回丢失的源码(附工具包)
Python逆向工程实战:从PyInstaller打包的.exe文件中找回丢失的源码 当你辛苦编写的Python代码因为各种原因丢失,只剩下一个由PyInstaller打包的.exe文件时,那种绝望感我深有体会。作为一名经历过多次类似困境的开发者,我想分享一套…...
PyTorch实战:手把手拆解CLIP中的AttentionPool2d模块(附完整代码与逐行注释)
PyTorch实战:手把手拆解CLIP中的AttentionPool2d模块(附完整代码与逐行注释) 当你第一次看到CLIP模型的AttentionPool2d模块时,可能会被它独特的结构所困惑。这个看似简单的模块,实际上是CLIP能够理解图像全局上下文信…...
15、深拷贝浅拷贝的区别?如何实现一个深拷贝?
目录 一、先说本质区别 二、从内存角度理解 三、浅拷贝是什么 常见浅拷贝方式 1. Object.assign 2. 展开运算符 ... 3. 数组方法 四、深拷贝是什么 五、常见深拷贝实现方式 1. JSON.parse(JSON.stringify(obj)) 优点 缺点 无法处理: 2. structuredClo…...
数据取证实战:Passware Kit Forensic 和 ElcomSoft 到底怎么选?附真实案例对比
数据取证工具深度评测:Passware Kit Forensic与ElcomSoft实战决策指南 当企业遭遇数据泄露或需要电子取证时,选对工具往往意味着调查成功与否的分水岭。Passware Kit Forensic和ElcomSoft作为行业两大标杆,常让专业人士陷入选择困境——它们都…...
