An unofficial Debian-based Docker container for Channels DVR with proper file permissions and monthly base image updates. Optimized for Unraid but works on any Linux system.
- Correct file permissions — PUID/PGID mapping +
umask 0000so you can delete recordings via Windows SMB shares - Monthly rebuilds — Fresh Debian base with latest security patches (rebuilds on the 1st of each month)
- No Docker update hassle — The Channels DVR app updates itself just like the offical image
- Channels installs from the offical source based off of the offical Linux installer on first launch unless it's already detected
- PUID/PGID support — Proper user mapping for any Linux system (no root-owned files)
- Monthly base image updates — Automatic rebuilds keep dependencies current
- TV Everywhere (TVE) — Google Chrome for TVE authentication
- Intel QuickSync — Hardware transcoding support
- NVIDIA GPU — Support via nvidia-container-toolkit
- Auto-updates — App handles its own updates (including pre-releases)
- Install from Community Applications and follow the instructions in the template.
- Go to Docker tab → Add Container
- Configure manually:
- Repository:
ghcr.io/mackid1993/channels-dvr:latest - Network:
host - Add path mappings and environment variables as shown below
- Repository:
docker run -d \
--name channels-dvr \
--net=host \
-e PUID=99 \
-e PGID=100 \
-e TZ=America/New_York \
-v /path/to/config:/channels-dvr \
-v /path/to/recordings:/shares/DVR \
ghcr.io/mackid1993/channels-dvr:latestversion: "3.8"
services:
channels-dvr:
image: ghcr.io/mackid1993/channels-dvr:latest
container_name: channels-dvr
network_mode: host
restart: unless-stopped
environment:
- PUID=99
- PGID=100
- TZ=America/New_York
volumes:
- /path/to/config:/channels-dvr
- /path/to/recordings:/shares/DVR| Variable | Default | Description |
|---|---|---|
PUID |
99 | User ID for file permissions (99 = nobody on Unraid) |
PGID |
100 | Group ID for file permissions (100 = users on Unraid) |
UMASK |
0000 | File permission mask (0000 = 777/666 for SMB compatibility) |
TZ |
America/New_York | Timezone for scheduling |
Note for non-Unraid systems: The defaults (99/100) are Unraid-specific. On other Linux systems, find your user's IDs with:
id $USER
# Example output: uid=1000(john) gid=1000(john) ...Then set PUID=1000 and PGID=1000 (or whatever your IDs are).
| Variable | Default | Description |
|---|---|---|
NVIDIA_DRIVER_CAPABILITIES |
compute,video,utility | NVIDIA capabilities for GPU transcoding |
| Path | Description |
|---|---|
/channels-dvr |
Config directory and Channels DVR binary |
/shares/DVR |
Recordings storage |
Hardware transcoding is not enabled by default. Add GPU support only if you need it.
docker run -d \
--name channels-dvr \
--net=host \
--device /dev/dri:/dev/dri \
-e PUID=99 \
-e PGID=100 \
-e TZ=America/New_York \
-v /path/to/config:/channels-dvr \
-v /path/to/recordings:/shares/DVR \
ghcr.io/mackid1993/channels-dvr:latestversion: "3.8"
services:
channels-dvr:
image: ghcr.io/mackid1993/channels-dvr:latest
container_name: channels-dvr
network_mode: host
restart: unless-stopped
environment:
- PUID=99
- PGID=100
- TZ=America/New_York
volumes:
- /path/to/config:/channels-dvr
- /path/to/recordings:/shares/DVR
devices:
- /dev/dri:/dev/dri- Edit the container
- In Advanced View, find the Intel GPU field
- Set the value to
/dev/dri - Click Apply
Install the NVIDIA Container Toolkit on your host:
# Debian/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-
Install the Nvidia-Driver plugin from Community Applications:
- Go to Apps tab → search for "Nvidia-Driver" → Install
- After installation, go to Settings → Nvidia Driver
- Ensure the driver version matches your GPU and click Apply
- Reboot if prompted
-
Configure the container for NVIDIA:
- Go to Docker tab → click on the channels-dvr container → Edit
- Scroll down to Extra Parameters and add:
--runtime=nvidia - In Advanced View, set NVIDIA Visible Devices to
all - Click Apply
-
Verify it's working:
- Click on the channels-dvr container icon → Console
- Run
nvidia-smi— you should see your GPU listed
docker run -d \
--name channels-dvr \
--net=host \
--runtime=nvidia \
-e PUID=99 \
-e PGID=100 \
-e TZ=America/New_York \
-e NVIDIA_VISIBLE_DEVICES=all \
-e NVIDIA_DRIVER_CAPABILITIES=compute,video,utility \
-v /path/to/config:/channels-dvr \
-v /path/to/recordings:/shares/DVR \
ghcr.io/mackid1993/channels-dvr:latestversion: "3.8"
services:
channels-dvr:
image: ghcr.io/mackid1993/channels-dvr:latest
container_name: channels-dvr
network_mode: host
runtime: nvidia
restart: unless-stopped
environment:
- PUID=99
- PGID=100
- TZ=America/New_York
- NVIDIA_VISIBLE_DEVICES=all
- NVIDIA_DRIVER_CAPABILITIES=compute,video,utility
volumes:
- /path/to/config:/channels-dvr
- /path/to/recordings:/shares/DVRdocker exec channels-dvr nvidia-smiYou should see your GPU listed. In the Channels DVR web UI, go to Settings → Transcoding and select your NVIDIA GPU.
| Port | Protocol | Description |
|---|---|---|
| 8089 | TCP | Web interface and API |
| 1900 | UDP | SSDP/UPnP discovery |
| 5353 | UDP | Bonjour/mDNS |
Note: --net=host is recommended for proper discovery.
docker build -t channels-dvr .This Docker image is provided as-is under the MIT License. Channels DVR is a commercial product — see getchannels.com for licensing. Channels DVR binaries are not distributed with this container. They are downloaded from offical sources on first start using the Linux installer. This is an unofficial container and not supported or endorsed by Fancy Bits LLC. All Channels DVR trademarks, logos, etc are property of Fancy Bits LLC.