Official Agent DVR image - AI-powered video surveillance. amd64, arm64, arm/v7.
9.2K
Official Agent DVR image. Website: https://www.ispyconnect.com
This official image is based on the community image originally created by MD. Mekayel Anik.
| Architecture | Available | Platform | Status |
|---|---|---|---|
| x86-64 | ✅ | linux/amd64 | Tested and working |
| arm64 | ✅ | linux/arm64 | Tested and working |
| armhf | ✅ | linux/arm/v7 | Tested and working |
Every tag is a multi-arch manifest: pull ispysoftware/agentdvr:latest (or any other tag) and Docker selects the right image for the host automatically. There are no separate per-architecture tags.
/AgentDVR (previously /home/agentdvr/AgentDVR). Make sure your volume mappings reflect this, particularly in unRAID, Synology and other GUI-based container managers.| Tag | Available | Description | Status |
|---|---|---|---|
| stable | ⏳ | The most recent release that has remained current for at least 5 days | Recommended for production use. Published automatically once a release has been current for 5 days |
| latest | ✅ | The most recent release | Tested and working |
| beta | ⚠️ | The current beta release | For testing only. Back up your configuration first; not recommended for production use |
| 8.0.8.0 | ✅ | Pinned release 8.0.8.0 | Tested and working |
| 7.9.5.0-beta | ⚠️ | Beta release 7.9.5.0 | For testing only. Back up your configuration first; not recommended for production use |
Pinned version tags are published from 7.9.4.0 onward (older releases are not built for this image). Each build also gets a dated tag, e.g. 7.9.5.0-beta-21082026, so a specific build can be pinned.
Interactive installers that check Docker, create the data folders, generate a docker-compose.yml and start the container:
Linux / macOS
curl -sL "https://www.ispyconnect.com/docker/linux/install-agentdvr.sh" -o docker_agent.sh && bash docker_agent.sh; rm docker_agent.shWindows (Docker Desktop): download and run agentdvr-docker-installer.ps1 (signed; it requests elevation and can start Docker Desktop for you).
Both installers offer the beta channel when a newer beta is available and otherwise use latest.
---
services:
ispyagentdvr:
image: ispysoftware/agentdvr:latest
container_name: ispyagentdvr
environment:
- PUID=1000
- PGID=1000
- AGENTDVR_WEBUI_PORT=8090
- TZ=Europe/London
volumes:
- /path/to/config:/AgentDVR/Media/XML
- /path/to/recordings:/AgentDVR/Media/WebServerRoot/Media
- /path/to/models:/AgentDVR/Media/Models
- /path/to/commands:/AgentDVR/Commands
ports:
- 8090:8090
- 3478:3478/udp
- 50000-50100:50000-50100/udp
restart: unless-stopped
Note: on Raspberry Pi and other low-power ARM boards, allow around 30 seconds after deployment before opening the web UI, then refresh if needed. With many cameras configured, startup can take longer.
docker run -d \
--name=ispyagentdvr \
-e PUID=1000 \
-e PGID=1000 \
-e AGENTDVR_WEBUI_PORT=8090 \
-e TZ=Europe/London \
-p 8090:8090 \
-p 3478:3478/udp \
-p 50000-50100:50000-50100/udp \
-v /path/to/config:/AgentDVR/Media/XML \
-v /path/to/recordings:/AgentDVR/Media/WebServerRoot/Media \
-v /path/to/models:/AgentDVR/Media/Models \
-v /path/to/commands:/AgentDVR/Commands \
--restart unless-stopped \
ispysoftware/agentdvr:latest
---
services:
ispyagentdvr:
image: ghcr.io/ispysoftware/agentdvr:latest
container_name: ispyagentdvr
environment:
- PUID=1000
- PGID=1000
- AGENTDVR_WEBUI_PORT=8090
- TZ=Europe/London
volumes:
- /path/to/config:/AgentDVR/Media/XML
- /path/to/recordings:/AgentDVR/Media/WebServerRoot/Media
- /path/to/models:/AgentDVR/Media/Models
- /path/to/commands:/AgentDVR/Commands
ports:
- 8090:8090
- 3478:3478/udp
- 50000-50100:50000-50100/udp
restart: unless-stopped
hostname: ispyagentdvr
domainname: local
mac_address: AB-BC-C0-D1-E2-EF
networks:
macvlan-1:
ipv4_address: 192.168.2.12
networks:
macvlan-1:
name: macvlan-1
external: TrueTo use MACVLAN, set valid values for mac_address, ipv4_address, subnet, ip_range and gateway. Access the web UI at http://ipv4_address:8090.
Hardware-accelerated encode/decode requires image version 5.3.5.0 or newer, and the GPU render devices must be passed through to the container as shown below. If you run into problems, please open an issue on this image's GitHub repository (linked at the bottom of this page).
---
services:
ispyagentdvr:
image: ghcr.io/ispysoftware/agentdvr:latest
container_name: ispyagentdvr
environment:
- PUID=1000
- PGID=1000
- AGENTDVR_WEBUI_PORT=8090
- TZ=Europe/London
volumes:
- /path/to/config:/AgentDVR/Media/XML
- /path/to/recordings:/AgentDVR/Media/WebServerRoot/Media
- /path/to/models:/AgentDVR/Media/Models
- /path/to/commands:/AgentDVR/Commands
ports:
- 8090:8090
- 3478:3478/udp
- 50000-50100:50000-50100/udp
restart: unless-stopped
docker run -d \
--name=ispyagentdvr \
-e PUID=1000 \
-e PGID=1000 \
-e AGENTDVR_WEBUI_PORT=8090 \
-e TZ=Europe/London \
-p 8090:8090 \
-p 3478:3478/udp \
-p 50000-50100:50000-50100/udp \
-v /path/to/config:/AgentDVR/Media/XML \
-v /path/to/recordings:/AgentDVR/Media/WebServerRoot/Media \
-v /path/to/models:/AgentDVR/Media/Models \
-v /path/to/commands:/AgentDVR/Commands \
--restart unless-stopped \
ispysoftware/agentdvr:latestInstall the latest Nvidia drivers and the Nvidia Container Toolkit on the host. The image already sets the environment variables needed to expose the GPU's capabilities.
With the toolkit installed, recreate the container with the Nvidia runtime (--runtime=nvidia) and add -e NVIDIA_VISIBLE_DEVICES=all. This can also be set to a specific GPU's UUID, which you can find with nvidia-smi --query-gpu=gpu_name,gpu_uuid --format=csv. The Nvidia runtime mounts the GPU and drivers from the host into the container automatically.
CUDA AI object detection: the image ships video hardware acceleration only. For GPU object detection (CUDA + cuDNN), build a small overlay image — see CUDA-ACCELERATION.md.
Add the following to your Compose file or CLI command respectively:
docker compose
devices:
- /dev/dri/renderD128:/dev/dri/renderD128
- /dev/dri/card0:/dev/dri/card0
- /dev/kfd:/dev/kfddocker cli
--device /dev/dri/renderD128:/dev/dri/renderD128 --device /dev/dri/card0:/dev/dri/card0 --device /dev/kfd:/dev/kfdAdd the following to your Compose file or CLI command respectively:
docker compose
devices:
- /dev/dri/renderD128:/dev/dri/renderD128
- /dev/dri/card0:/dev/dri/card0docker cli
--device /dev/dri/renderD128:/dev/dri/renderD128 --device /dev/dri/card0:/dev/dri/card0docker run -d \
--name=ispyagentdvr \
-e PUID=1000 \
-e PGID=1000 \
-e AGENTDVR_WEBUI_PORT=8090 \
-e TZ=Europe/London \
-p 8090:8090 \
-p 3478:3478/udp \
-p 50000-50100:50000-50100/udp \
-v /path/to/config:/AgentDVR/Media/XML \
-v /path/to/recordings:/AgentDVR/Media/WebServerRoot/Media \
-v /path/to/models:/AgentDVR/Media/Models \
-v /path/to/commands:/AgentDVR/Commands \
--restart unless-stopped \
`for dev in dri dma_heap mali0 rga mpp_service \
iep mpp-service vpu_service vpu-service \
hevc_service hevc-service rkvdec rkvenc vepu h265e ; do \
[ -e "/dev/$dev" ] && echo " --device /dev/$dev"; \
done`
ispysoftware/agentdvr:latestParameters are separated by a colon and indicate <external>:<internal>. For example, -p 8091:8090 exposes port 8090 inside the container on host port 8091.
| Parameter | Function |
|---|---|
-p 8090
| Web UI port |
-p 3478/udp
| TURN server port, used for WebRTC connection setup |
-p 50000-50100/udp
| WebRTC media ports, allocated as needed |
-e PUID=1000
| User ID - see User / Group Identifiers below |
-e PGID=1000
| Group ID - see User / Group Identifiers below |
-e TZ=Europe/London
| Timezone, from the tz database |
-e AGENTDVR_WEBUI_PORT=8090
| Port the web UI listens on inside the container |
-v /AgentDVR/Media/XML
| Configuration files |
-v /AgentDVR/Media/WebServerRoot/Media
| Recordings |
-v /AgentDVR/Media/Models
| AI model files |
-v /AgentDVR/Commands
| Custom commands |
When using volumes (-v flags), permission issues can arise between the host and the container. To avoid this, specify the user and group the container should run as with PUID and PGID, and make sure any volume directories on the host are owned by that user.
In the examples above PUID=1000 and PGID=1000. To find yours, run id username:
$ id username
uid=1000(docker user) gid=1000(docker group) groups=1000(docker group)The Agent DVR user guide is available at https://www.ispyconnect.com/docs/agent/about.
When not using host networking, the UDP ports listed in the examples must be published for remote viewing to work.
The web UI is available at http://<container ip>:8090 (or http://ipv4_address:8090 with MACVLAN).
docker compose pull
docker compose pull ispyagentdvr
docker compose up -d
docker compose up -d ispyagentdvr
docker image prune
docker pull ispysoftware/agentdvr:latest
docker stop ispyagentdvr
docker rm ispyagentdvr
/AgentDVR/Media/XML is mapped to a host folder, your settings are preserved) docker image prune
Pull the latest image and recreate the container with the same environment variables in one run:
docker run --rm \
-v /var/run/docker.sock:/var/run/docker.sock \
containrrr/watchtower\
--run-once ispyagentdvrRemove old unused images: docker image prune
If you used the old separate audio and video volumes, move their contents into the new media folder before starting the container again:
mkdir -p /ispyagentdvr/media/old && \
mv /path/to/recordings/audio /ispyagentdvr/media/old && \
mv /path/to/recordings/video /ispyagentdvr/media/oldAudio playback on Linux hosts: if action sounds do not play through the host's speakers (Debian/Ubuntu etc.), add the following to your Compose file:
group_add:
- audio
devices:
- /dev/snd:/dev/snd
ARM boards: Raspberry Pi 4 and newer may support limited hardware acceleration with the right host setup. Performance varies; if you find a reliable VAAPI/VPU configuration, share it on GitHub and it can be documented with credit.
Before submitting an issue:
<agent-ip>:<port>/logs.html for errors.
logs.html output in the report.
Version history
ispysoftware/agentdvr image. FFmpeg 9 is bundled (LGPL build); the GPL build is an optional in-app download/AgentDVR/Media/Models/AgentDVR from /home/agentdvr/AgentDVR. Take particular care to apply this change in unRAID, Synology and other GUI-based container managersdoitandbedone/ispyagentdvr image; no directory mapping changes are needed when switching, except in unRAID/Synology and other GUI-based container managers, where the documented mappings must be appliedFor issues or requests specific to this Docker image, use the image's GitHub repository: https://www.github.com/ispysoftware/agentdvr-docker
For Agent DVR issues and requests, visit: https://www.reddit.com/r/ispyconnect/
For details of the custom base image this container builds on, see: https://github.com/ispysoftware/ispyagentdvr-base-image
Content type
Image
Digest
sha256:56d3207f1…
Size
252.9 MB
Last updated
6 days ago
docker pull ispysoftware/agentdvr