Not having the desire to put frigate on a standalone server of some sort, I wanted it to run as a container in Proxmox. Since Frigate is supplied as a Docker container, and I don't want to run Docker directly on the Proxmox host, there are two choices open to me:
- run Frigate in a virtual machine - prevents sharing an Nvidia card with other machines or containers, or
- run Frigate in an LXC or an OCI container - an Nvidia card can be shared with multiple containers, and resource requirements are reduced, at the risk of security issues (which are reduced if the host is a private server)
I'm running on Proxmox 9.1.9 with kernel SMP PREEMPT_DYNAMIC PMX 6.17.13-4 (2026-04-21T22:03Z) x86_64 GNU/Linux
This installation is a privileged container as I had troubles with non-privileged. I'll have to come back to this based upon:
Running in rootless LXC, and maybe require the user id mapping from Unprivileged LXC containers.
Some installation commands, based upon connecting Frigate to an Nvidia GPU. Some instructions come from
Installing the NVIDIA Container Toolkit, which is required for connecting to the Nvidia GPU (commands assume sudo or running as root, which is default in a basic LXC container). The link contains installation, testing and troubleshooting instructions.
# Install the prerequisites for the instructions below:
sudo apt-get update && sudo apt-get install -y --no-install-recommends \
ca-certificates \
curl \
gnupg2
# Configure the production repository:
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
&& curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \
sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
# Update the packages list from the repository:
apt-get update
# Install the NVIDIA Container Toolkit packages:
export NVIDIA_CONTAINER_TOOLKIT_VERSION=1.19.0-1
apt-get install -y \
nvidia-container-toolkit=${NVIDIA_CONTAINER_TOOLKIT_VERSION} \
nvidia-container-toolkit-base=${NVIDIA_CONTAINER_TOOLKIT_VERSION} \
libnvidia-container-tools=${NVIDIA_CONTAINER_TOOLKIT_VERSION} \
libnvidia-container1=${NVIDIA_CONTAINER_TOOLKIT_VERSION}
# Configure the container runtime:
nvidia-ctk runtime configure --runtime=docker
systemctl daemon-reload
systemctl restart docker
# The nvidia-ctk command modifies the /etc/docker/daemon.json file on the host.
# The file is updated so that Docker can use the NVIDIA Container Runtime.
# The file requires a modification when run in an LXC container to use fuse-overlayfs
apt install fuse-overlayfs
echo '{
"storage-driver": "fuse-overlayfs"
}' | tee /etc/docker/daemon.json
# with this driver, the container requires a restart
# path for fuse-overlayfsimages will be: /var/lib/docker/fuse-overlayfs
# confirm the storage driver
reboot
docker info | grep -i storage
# test nvidia gpu is available in a container,
# a couple different ways
# the tag may required something for your environment
# https://gitlab.com/nvidia/container-images/cuda/raw/master/doc/supported-tags.md
# latest_tag='13.2.0-base-ubuntu24.04'
# original command:
latest_tag="`curl -s https://gitlab.com/nvidia/container-images/cuda/raw/master/doc/supported-tags.md | grep -i "base-ubuntu" | head -1 | perl -wple 's/.+\`(.+?)\`.+/$1/'`"
echo $latest_tag
# variation 1
docker run --rm --gpus all nvidia/cuda:${latest_tag} nvidia-smi
# variation 2
docker run --rm --runtime=nvidia --gpus all ubuntu nvidia-smi
# bash completion
apt install bash-completion
# add to ~/.bashrc
if [ -f /etc/bash_completion ]; then
. /etc/bash_completion
fi
source ~/.bashrc
mkdir -p ~/.local/share/bash-completion/completions
docker completion bash > ~/.local/share/bash-completion/completions/docker