How to Install NVIDIA GPU Drivers on Proxmox and Pass Through to LXC Containers
A complete guide to getting an NVIDIA GPU working on a Proxmox host running kernel 6.17, and sharing it with multiple LXC containers (e.g. Jellyfin and Immich) for hardware transcoding and AI inference.
Hardware Used
- NVIDIA GeForce RTX 3080
- Proxmox VE 9.2.4 on AMD Ryzen 5 5600G
The Challenge
Proxmox kernel 7.0.x has incomplete kernel headers — the `Documentation/Kconfig` file is missing, which prevents NVIDIA drivers from compiling. Additionally, if your have set up a ZFS pool which uses the `block_cloning_endian` feature, you cannot use kernel 6.14 as it lacks ZFS support for that feature.
The solution: use kernel 6.17
Kernel 6.17 has complete headers AND supports all modern ZFS pool features.
Install Kernel 6.17
1apt install -y proxmox-kernel-6.17 proxmox-headers-6.172proxmox-boot-tool kernel pin 6.17.13-15-pve3proxmox-boot-tool refresh4reboot
After reboot, verify:
1uname -r2# Should show: 6.17.13-15-pve
Blacklist Nouveau and NovaCore
Kernel 7.x introduced NovaCore, a new Rust-based driver that competes with the NVIDIA driver. Blacklist both:
1cat > /etc/modprobe.d/blacklist-nvidia-nouveau.conf << 'EOF'2blacklist nouveau3options nouveau modeset=04blacklist nova5blacklist nova_core6options nova modeset=07EOF89update-initramfs -u -k all10reboot
Install Build Dependencies
1apt install -y g++ freeglut3-dev build-essential libx11-dev libxmu-dev \2 libxi-dev libglu1-mesa-dev libfreeimage-dev libglfw3-dev wget htop \3 btop nvtop nano glances git pciutils cmake curl libcurl4-openssl-dev \4 pve-headers-$(uname -r) dkms make56update-initramfs -u
Download and Install NVIDIA Driver
Visit https://www.nvidia.com/en-us/drivers/unix/ and copy the download link for the latest Production Branch driver. At the time of writing this was 595.84.
1cd /tmp2wget https://us.download.nvidia.com/XFree86/Linux-x86_64/595.84/NVIDIA-Linux-x86_64-595.84.run3chmod +x NVIDIA-Linux-x86_64-595.84.run4./NVIDIA-Linux-x86_64-595.84.run --dkms
During the installer prompts:
- Kernel module type: **MIT/GPL** (open source)
- Register with DKMS: **Yes** (important — ensures driver survives kernel updates)
- 32-bit compatibility: **No**
- Update X config: **No** (headless server)
Verify the Driver
1nvidia-smi
You should see your GPU listed with driver version and CUDA version. Example output:
1+-----------------------------------------------------------------------------------------+2| NVIDIA-SMI 595.84 Driver Version: 595.84 CUDA Version: 13.2 |3| GPU Name | Bus-Id | Memory-Usage | GPU-Util |4| 0 RTX 3080 | 00000000:01:00.0 | 9MiB / 10240MiB | 0% |5+-----------------------------------------------------------------------------------------+
1Enable Persistence Mode on Boot
1crontab -e
Add at the top:
1@reboot nvidia-smi -pm 1 && nvidia-smi -pl 250
This enables persistence mode and caps power at 250W (adjust to your card's TDP)
Configure LXC Containers for GPU Passthrough
Add the following to each LXC container config that needs GPU access. Edit `/etc/pve/lxc/101.conf` for example:
1nano /etc/pve/lxc/101.conf
Add:
1features: nesting=12lxc.cgroup2.devices.allow: c 195:* rwm3lxc.cgroup2.devices.allow: c 510:* rwm4lxc.cgroup2.devices.allow: c 511:* rwm5lxc.mount.entry: /dev/nvidia0 dev/nvidia0 none bind,optional,create=file6lxc.mount.entry: /dev/nvidiactl dev/nvidiactl none bind,optional,create=file7lxc.mount.entry: /dev/nvidia-uvm dev/nvidia-uvm none bind,optional,create=file8lxc.mount.entry: /dev/nvidia-uvm-tools dev/nvidia-uvm-tools none bind,optional,create=file9lxc.mount.entry: /dev/nvidia-caps/nvidia-cap1 dev/nvidia-caps/nvidia-cap1 none bind,optional,create=file10lxc.mount.entry: /dev/nvidia-caps/nvidia-cap2 dev/nvidia-caps/nvidia-cap2 none bind,optional,create=file
Restart the container:
1pct restart 101
Install NVIDIA Driver Inside Each LXC Container
Push the same `.run` file into the container and install it without kernel modules (the host handles those):
1pct push 101 /tmp/NVIDIA-Linux-x86_64-595.84.run /root/NVIDIA-Linux-x86_64-595.84.run2pct exec 101 -- chmod +x /root/NVIDIA-Linux-x86_64-595.84.run3pct exec 101 -- /root/NVIDIA-Linux-x86_64-595.84.run --no-kernel-modules
During the installer prompts:
- Kernel module type: NVIDIA Proprietary
- Continue installation (if asked about existing driver): Yes
- 32-bit compatibility: No
- Update X config: No
Verify GPU Inside the Container
1pct exec 101 -- nvidia-smi
You should see the same GPU output as on the host. The LXC container can share the GPU simultaneously with other LXC containers and the host.
Keep in mind!
Kernel version matters. This guide uses kernel 6.17. If you upgrade to kernel 7.0 in the future, check whether Proxmox has published complete headers before attempting driver installation.
DKMS ensures survival across kernel updates. Because we used `--dkms` during installation, the driver will automatically rebuild when Proxmox updates the kernel.
ZFS compatibility. If your ZFS pool uses `block_cloning_endian` (created on a newer ZFS), you must use kernel 6.17 or 7.0+. Kernel 6.14 will fail to import the pool read-write.

Mike
🗓️ Posted on July 26, 2026