Nvidia in container #
-
首先确保 NixOS 本身已经配置好 Nvidia 驱动: https://nixos.wiki/wiki/Nvidia
-
NixOS docker 相关配置
virtualisation.docker.enable = true; hardware.nvidia-container-toolkit.enable = true; -
创建 distrobox 容器时的参数
注意 –additional-flags
- 要传 –device nvidia.com/gpu=all
- 不要传 –gpus all
distrobox-create --root -i ubuntu:24.04 -n ubuntu-2404-n --hostname ubuntu-2404-n --additional-flags "--device nvidia.com/gpu=all"
distrobox 使用 host 的输入法 #
参考1:https://github.com/89luca89/distrobox/issues/957
1.change GTK_IM_MODULE and QT_IM_MODULE to xim,like
export GTK_IM_MODULE=xim # 有些应用需要指定 xim, 如 vscode, 有些需要 fcitx 如 wps
export QT_IM_MODULE=xim # 同上
export XMODIFIERS=@im=fcitx # 固定为 fcitx2.enable locale in /etc/locale.gen and run locale-gen command
参考2:https://github.com/fcitx/fcitx5/discussions/990
Ubuntu 容器内 vulkan 无法正常使用 #
问题描述 #
容器外 nvidia-smi 和 vulkaninfo 输出都正常,能看到 N 卡信息。
$ nvidia-smi
Fri Jul 4 10:32:09 2025
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 565.77 Driver Version: 565.77 CUDA Version: 12.7 |
|-----------------------------------------+------------------------+----------------------+
| GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|=========================================+========================+======================|
| 0 NVIDIA GeForce RTX 2080 Off | 00000000:01:00.0 On | N/A |
| N/A 65C P8 8W / 50W | 529MiB / 8192MiB | 7% Default |
| | | N/A |
+-----------------------------------------+------------------------+----------------------+
+-----------------------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=========================================================================================|
| 0 N/A N/A 151550 G ...0jn1l86i6-xorg-server-21.1.16/bin/X 272MiB |
| 0 N/A N/A 152101 G /run/current-system/sw/bin/cinnamon 77MiB |
| 0 N/A N/A 154788 G ...bda102dc07718372145c47159957d6ca33b 79MiB |
| 0 N/A N/A 158835 G ...an,WebOTP --variations-seed-version 20MiB |
| 0 N/A N/A 181293 G /usr/share/code/code 58MiB |
+-----------------------------------------------------------------------------------------+$ vulkaninfo --summary
==========
VULKANINFO
==========
Devices:
========
GPU0:
apiVersion = 1.3.289
driverVersion = 565.77.0.0
vendorID = 0x10de
deviceID = 0x1ed0
deviceType = PHYSICAL_DEVICE_TYPE_DISCRETE_GPU
deviceName = NVIDIA GeForce RTX 2080
driverID = DRIVER_ID_NVIDIA_PROPRIETARY
driverName = NVIDIA
driverInfo = 565.77
conformanceVersion = 1.3.8.2
deviceUUID = 714dd5f1-e57d-7b68-85b5-9e3f8ebbff93
driverUUID = 5d948742-de2b-5e32-9692-c2a5621aed9a
GPU1:
apiVersion = 1.3.289
driverVersion = 24.2.8
vendorID = 0x8086
deviceID = 0x3e98
deviceType = PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU
deviceName = Intel(R) UHD Graphics 630 (CFL GT2)
driverID = DRIVER_ID_INTEL_OPEN_SOURCE_MESA
driverName = Intel open-source Mesa driver
driverInfo = Mesa 24.2.8
conformanceVersion = 1.3.6.0
deviceUUID = 8680983e-0200-0000-0002-000000000000
driverUUID = 235d7fbb-cda3-983c-2211-66b6596d8146
GPU2:
apiVersion = 1.3.289
driverVersion = 0.0.1
vendorID = 0x10005
deviceID = 0x0000
deviceType = PHYSICAL_DEVICE_TYPE_CPU
deviceName = llvmpipe (LLVM 18.1.8, 256 bits)
driverID = DRIVER_ID_MESA_LLVMPIPE
driverName = llvmpipe
driverInfo = Mesa 24.2.8 (LLVM 18.1.8)
conformanceVersion = 1.3.1.1
deviceUUID = 6d657361-3234-2e32-2e38-000000000000
driverUUID = 6c6c766d-7069-7065-5555-494400000000容器内,nvidia-smi 输出正常,vulkaninfo 输出却看不到 N 卡。
$ nvidia-smi
Fri Jul 4 01:30:07 2025
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 565.77 Driver Version: 565.77 CUDA Version: 12.7 |
|-----------------------------------------+------------------------+----------------------+
| GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|=========================================+========================+======================|
| 0 NVIDIA GeForce RTX 2080 Off | 00000000:01:00.0 On | N/A |
| N/A 39C P8 9W / 50W | 364MiB / 8192MiB | 10% Default |
| | | N/A |
+-----------------------------------------+------------------------+----------------------+
+-----------------------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=========================================================================================|
| 0 N/A N/A 151550 G ...0jn1l86i6-xorg-server-21.1.16/bin/X 217MiB |
| 0 N/A N/A 152101 G /run/current-system/sw/bin/cinnamon 58MiB |
| 0 N/A N/A 154788 G ...bda102dc07718372145c47159957d6ca33b 68MiB |
+-----------------------------------------------------------------------------------------+$ vulkaninfo --summary
==========
VULKANINFO
==========
Devices:
========
GPU0:
apiVersion = 1.3.289
driverVersion = 24.2.8
vendorID = 0x8086
deviceID = 0x3e98
deviceType = PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU
deviceName = Intel(R) UHD Graphics 630 (CFL GT2)
driverID = DRIVER_ID_INTEL_OPEN_SOURCE_MESA
driverName = Intel open-source Mesa driver
driverInfo = Mesa 24.2.8-1ubuntu1~24.04.1
conformanceVersion = 1.3.6.0
deviceUUID = 8680983e-0200-0000-0002-000000000000
driverUUID = 01445b43-3542-5b20-af99-316b29c3521c
GPU1:
apiVersion = 1.3.289
driverVersion = 0.0.1
vendorID = 0x10005
deviceID = 0x0000
deviceType = PHYSICAL_DEVICE_TYPE_CPU
deviceName = llvmpipe (LLVM 19.1.1, 256 bits)
driverID = DRIVER_ID_MESA_LLVMPIPE
driverName = llvmpipe
driverInfo = Mesa 24.2.8-1ubuntu1~24.04.1 (LLVM 19.1.1)
conformanceVersion = 1.3.1.1
deviceUUID = 6d657361-3234-2e32-2e38-2d3175627500
driverUUID = 6c6c766d-7069-7065-5555-494400000000问题原因 #
容器内,vulkan 相关的一些驱动和依赖程序没有安装。
最直接的表现就是 /usr/share/vulkan/icd.d/nvidia_icd.json 文件不存在。
解决方法 #
sudo apt install software-properties-common
sudo add-apt-repository universe multiverse # 启用标准扩展仓库
sudo add-apt-repository ppa:graphics-drivers/ppa # 添加专有驱动PPA
sudo apt update
sudo apt install vulkan-tools libvulkan1 libvulkan-dev libnvidia-gl-565/noble # 注意版本要匹配验证 #
$ cat /usr/share/vulkan/icd.d/nvidia_icd.json
{
"file_format_version" : "1.0.1",
"ICD": {
"library_path": "libGLX_nvidia.so.0",
"api_version" : "1.3.289"
}
}$ vulkaninfo --summary
==========
VULKANINFO
==========
Devices:
========
GPU0:
apiVersion = 1.3.289
driverVersion = 565.77.0.0
vendorID = 0x10de
deviceID = 0x1ed0
deviceType = PHYSICAL_DEVICE_TYPE_DISCRETE_GPU
deviceName = NVIDIA GeForce RTX 2080
driverID = DRIVER_ID_NVIDIA_PROPRIETARY
driverName = NVIDIA
driverInfo = 565.77
conformanceVersion = 1.3.8.2
deviceUUID = 714dd5f1-e57d-7b68-85b5-9e3f8ebbff93
driverUUID = 5d948742-de2b-5e32-9692-c2a5621aed9a
GPU1:
apiVersion = 1.3.289
driverVersion = 24.2.8
vendorID = 0x8086
deviceID = 0x3e98
deviceType = PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU
deviceName = Intel(R) UHD Graphics 630 (CFL GT2)
driverID = DRIVER_ID_INTEL_OPEN_SOURCE_MESA
driverName = Intel open-source Mesa driver
driverInfo = Mesa 24.2.8-1ubuntu1~24.04.1
conformanceVersion = 1.3.6.0
deviceUUID = 8680983e-0200-0000-0002-000000000000
driverUUID = 01445b43-3542-5b20-af99-316b29c3521c
GPU2:
apiVersion = 1.3.289
driverVersion = 0.0.1
vendorID = 0x10005
deviceID = 0x0000
deviceType = PHYSICAL_DEVICE_TYPE_CPU
deviceName = llvmpipe (LLVM 19.1.1, 256 bits)
driverID = DRIVER_ID_MESA_LLVMPIPE
driverName = llvmpipe
driverInfo = Mesa 24.2.8-1ubuntu1~24.04.1 (LLVM 19.1.1)
conformanceVersion = 1.3.1.1
deviceUUID = 6d657361-3234-2e32-2e38-2d3175627500
driverUUID = 6c6c766d-7069-7065-5555-494400000000