BlogHow to Install NVIDIA GPU Drivers on Proxmox and Pass Through to LXC ContainersJuly 26, 2026

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.17
2proxmox-boot-tool kernel pin 6.17.13-15-pve
3proxmox-boot-tool refresh
4reboot

After reboot, verify:

1uname -r
2# 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 nouveau
3options nouveau modeset=0
4blacklist nova
5blacklist nova_core
6options nova modeset=0
7EOF
8
9update-initramfs -u -k all
10reboot

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 make
5
6update-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 /tmp
2wget https://us.download.nvidia.com/XFree86/Linux-x86_64/595.84/NVIDIA-Linux-x86_64-595.84.run
3chmod +x NVIDIA-Linux-x86_64-595.84.run
4./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=1
2lxc.cgroup2.devices.allow: c 195:* rwm
3lxc.cgroup2.devices.allow: c 510:* rwm
4lxc.cgroup2.devices.allow: c 511:* rwm
5lxc.mount.entry: /dev/nvidia0 dev/nvidia0 none bind,optional,create=file
6lxc.mount.entry: /dev/nvidiactl dev/nvidiactl none bind,optional,create=file
7lxc.mount.entry: /dev/nvidia-uvm dev/nvidia-uvm none bind,optional,create=file
8lxc.mount.entry: /dev/nvidia-uvm-tools dev/nvidia-uvm-tools none bind,optional,create=file
9lxc.mount.entry: /dev/nvidia-caps/nvidia-cap1 dev/nvidia-caps/nvidia-cap1 none bind,optional,create=file
10lxc.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.run
2pct exec 101 -- chmod +x /root/NVIDIA-Linux-x86_64-595.84.run
3pct 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

Mike

🗓️ Posted on July 26, 2026