Docker¶
The image is Debian + ffmpeg + libzimg (zscale). VAAPI packages install on linux/amd64 only.
- Image:
ghcr.io/skila1/viewdock:latest(same tag on CPU and GPU hosts) - Platforms:
linux/amd64,linux/arm64 - Tags:
lateston the default branch, theVERSIONfile, git SHA, and semver fromv*tags - One Compose file. Set
VD_GPU=trueorVD_GPU=falsein.env. The installer setsCOMPOSE_PROFILESto match (gpuorcpu) so CPU hosts never request an NVIDIA device. VD_GPU=trueneeds the NVIDIA Container Toolkit on the host. ViewDock does not install drivers or the toolkit.
Production hosts should use the one-line installer, then:
The repo docker-compose.yml is the production pull file. The installer writes the same shape (plus ./update and the Docker socket) so Admin → Updates can recreate the container. Re-running the installer or viewdock update keeps an existing .env and an already-migrated compose file; it only adds missing keys and upgrades the old overlay layout. VD_GPU is never overwritten. On a first install, a working NVIDIA Docker runtime sets VD_GPU=true.
For a local distributed profile, use COMPOSE_PROFILES=distributed docker compose up -d. This starts ViewDock with PostgreSQL and MinIO; override VD_DATABASE_URL or the VD_STORAGE_* variables for external services.
The distributed profile uses the public docker.io/bitnamilegacy/minio:latest image. It runs as root only to accommodate Docker Desktop named-volume permissions; production operators should use a managed S3-compatible service or a volume with an explicitly configured non-root owner.
Volumes¶
| Host | Container | Notes |
|---|---|---|
./config |
/config |
SQLite only |
./cache |
/cache |
artwork + HLS |
./transcode |
/transcode |
in-flight jobs |
| media folder | /media |
writable so Admin uploads can land here. Entrypoint chowns the directory inode only; it never walks files |
User¶
PUID / PGID map the process user. Entrypoint chowns directory inodes of /config, /cache, /transcode, /config/uploads, and /media only. Media files are never walked.
If /dev/dri exists and the process starts as root, those device GIDs are added as supplementary groups.
Health¶
wget http://127.0.0.1:8080/healthz. Compose stop_grace_period should be 60s so FFmpeg children can exit.