Running Oden Streamer in Docker
Prerequisites
-
NVIDIA GPU
-
Docker
To install the NVIDIA Container Toolkit on Ubuntu:
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' | \
sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
sudo apt-get update
sudo apt-get install -y nvidia-container-toolkit
sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart docker
Dockerfile
The base image depends on your platform.
Desktop Ubuntu
Use an ubuntu base image matching the Oden Streamer .deb package version.
FROM ubuntu:24.04
ARG ODEN_INSTALLER_PATH=./oden-streamer.deb
ENV DEBIAN_FRONTEND=noninteractive
COPY "$ODEN_INSTALLER_PATH" /oden-streamer.deb
RUN apt-get update -qq && \
apt-get install -qq -y --no-install-recommends /oden-streamer.deb && \
rm -rf /var/lib/apt/lists/* /oden-streamer.deb
USER root
CMD [ "oden-streamer", "--headless", "--configurator", "/root/project/streamer.vproj" ]
The base image Ubuntu version must match the .deb package. For example, a _24.04.deb package requires ubuntu:24.04. NVIDIA driver libraries are injected at runtime by the container toolkit, so a plain Ubuntu base image is sufficient.
|
Jetson
Use an L4T base image matching your host JetPack version.
Check with cat /etc/nv_tegra_release.
FROM nvcr.io/nvidia/l4t-base:36.4.0
ARG ODEN_INSTALLER_PATH=./oden-streamer.deb
ENV DEBIAN_FRONTEND=noninteractive
COPY "$ODEN_INSTALLER_PATH" /oden-streamer.deb
RUN apt-get update -qq && \
apt-get install -qq -y --no-install-recommends /oden-streamer.deb && \
rm -rf /var/lib/apt/lists/* /oden-streamer.deb
USER root
CMD [ "oden-streamer", "--headless", "--configurator", "/root/project/streamer.vproj" ]
The L4T base image version must match your host JetPack version. For example, JetPack 5.1 uses nvcr.io/nvidia/l4t-base:35.3.1 and JetPack 6.1 uses nvcr.io/nvidia/l4t-base:36.4.0.
|
Building
Place the Oden Streamer .deb installer next to the Dockerfile and build:
docker build --build-arg ODEN_INSTALLER_PATH=./oden-streamer.deb -t oden-streamer:latest .
Running
docker run --runtime nvidia -e NVIDIA_VISIBLE_DEVICES=all \
--network host --rm -it \
-v /run/udev:/run/udev:ro \
-v ./key.conf:/root/.config/oden/Oden_Streamer/key.conf \
-v ./project:/root/project \
oden-streamer:latest
--runtime nvidia together with -e NVIDIA_VISIBLE_DEVICES=all is needed for GPU access. Alternatively, you can use --gpus all instead of both flags.
--network host is used for network access.
/run/udev is mounted read-only for licensing to work.
Mount your license key to /root/.config/oden/Oden_Streamer/key.conf.
The project file (.vproj) needs to be accessible inside the container - in this example it’s mounted to /root/project which matches the path in the Dockerfile CMD.
Docker Compose
services:
oden-streamer:
image: oden-streamer:latest
network_mode: host
volumes:
- /run/udev:/run/udev:ro
- ./key.conf:/root/.config/oden/Oden_Streamer/key.conf
- ./project:/root/project
environment:
- NVIDIA_VISIBLE_DEVICES=all
runtime: nvidia
docker compose up
Add more volume mounts if needed, e.g. camera devices.
nvunixfd GStreamer Plugin (Jetson)
Oden Streamer can use nvunixfdsrc / nvunixfdsink for zero-copy video IPC on Jetson.
On JetPack 5 they are bundled with the Oden Streamer installer, and the .so can be found in /usr/lib/aarch64-linux-gnu/gstreamer-1.0/.
On JetPack 6+ they are not included in the Oden Streamer installer and must be installed separately - either install DeepStream (which bundles them) or build from source at voysys/nvunixfd by running make and copying the .so to /usr/lib/aarch64-linux-gnu/gstreamer-1.0/.
The plugin needs to be available inside the container - either install it on the host, bake it into the Docker image, or mount it in.