ubuntu24 Docker 容器中运行 GUI 程序(Qt / X11 / GPU)实践指南

安装

sh 复制代码
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
sudo apt-get update

问题1

sh 复制代码
sudo apt-get install -y nvidia-docker2
sudo systemctl restart docker 
正在读取软件包列表... 完成
正在分析软件包的依赖关系树... 完成
正在读取状态信息... 完成                 
E: 无法定位软件包 nvidia-docker2

解决

sh 复制代码
curl -s -L https://nvidia.github.io/nvidia-docker/ubuntu22.04/nvidia-docker.list | \
    sudo tee /etc/apt/sources.list.d/nvidia-docker.list
sudo apt-get update

如果配置了docker文件, 安装过程先保留自己的配置再修改

复制代码
配置文件 '/etc/docker/daemon.json'
 ==> 系统中的这个文件或者是由您创建的,或者是由脚本建立的。
 ==> 软件包维护者所提供的软件包中也包含了该文件。
   您现在希望如何处理呢? 您有以下几个选择:
    Y 或 I  :安装软件包维护者所提供的版本
    N 或 O  :保留您原来安装的版本
      D     :显示两者的区别
      Z     :把当前进程切换到后台,然后查看现在的具体情况
 默认的处理方法是保留您当前使用的版本。
*** daemon.json (Y/I/N/O/D/Z) [默认选项=N] ? d
--- /etc/docker/daemon.json     2026-03-03 14:07:30.465355011 +0800
+++ /etc/docker/daemon.json.dpkg-new    2023-03-31 21:10:49.000000000 +0800
@@ -1,3 +1,8 @@
 {
-  "registry-mirrors": ["https://mirror.ccs.tencentyun.com"]
+    "runtimes": {
+        "nvidia": {
+            "path": "nvidia-container-runtime",
+            "runtimeArgs": []
+        }
+    }
 }

开启 X11 访问权限

宿主机执行:

sh 复制代码
xhost +local:docker

输出:
non-network local connections being added to access control list
说明 Docker 容器可以访问 X Server。

测试 GUI 环境

sh 复制代码
安装工具:

sudo apt install -y x11-apps
sudo apt install -y mesa-utils
测试 X11
xeyes

如果出现 👀 窗口说明 X11 正常。

GPU 测试

复制代码
glxgears

如果出现旋转齿轮窗口说明 GPU 渲染正常。

Docker GUI 测试

sh 复制代码
运行:

docker run -it --rm \
--network host \
-e DISPLAY=$DISPLAY \
-v /tmp/.X11-unix:/tmp/.X11-unix \
ubuntu:22.04

容器内安装 GUI 工具:

apt update
apt install -y x11-apps
xeyes

如果窗口弹出说明 Docker GUI 正常。
相关推荐
闲云野鹤在人间7 小时前
Kubernetes Service 与 kube-proxy 详解
云原生·容器·kubernetes
说实话起个名字真难啊8 小时前
实战docker部署dify及注意点
运维·docker·容器
闲云自留地9 小时前
K8s Service 全解:服务发现、四种类型、会话保持、金丝雀发布一篇通
容器·kubernetes·服务发现
choumin10 小时前
C++ 标准容器为什么不能存引用
c++·容器·引用类型
Starry-sky(jing)11 小时前
crane 下载镜像:不连接 Docker,3 步准备并校验 ARM64 离线包
运维·docker·arm64·crane
对象存储与RustFS12 小时前
GPU 在空转等数据?PyTorch 训练集进 RustFS 的三种接法
后端·docker·云原生
可涵不会debug16 小时前
超级马里奥常驻极空间以后怎么打开?Docker运行游戏页面,手机电脑都能从浏览器进入
游戏·docker·智能手机
姜鱼问生1 天前
网页一片白?Docker 跑 Nginx 读不到文件,403 Forbidden 排查实录
nginx·docker·容器
\光辉岁月/1 天前
2.spring5-IOC
java·容器·ioc·注解
ms72wx1 天前
Docker 命令学习笔记:从入门到进阶的实战指南
笔记·学习·docker