services: jellyfin: # Pinned to official stable 12.2. History: ran the 2026060106 unstable # build from 2026-07-14 because the DB had been migrated to the v12 schema # and 10.11.x could not read it. Stable 12 shipped 2026-09; moved to # 12.2 on 2026-10-17, 12.3 on 2026-10-26. Never go back below 12. image: jellyfin/jellyfin:12.3.20261023-013714 container_name: jellyfin restart: unless-stopped environment: - PUID=1000 - PGID=1000 - LIBVA_DRIVER_NAME=i965 # Haswell HD 4600 uses legacy i965 (iHD is Broadwell+) volumes: # LOCAL disk, not NFS: jellyfin.db (SQLite WAL) on NFS caused 60-100s # "database is locked" stalls -> server lockups during playback # (2026-07-19). Old copy left at /mnt/docker-data/configs/jellyfin. - /var/lib/jellyfin:/config - /mnt/nas-media:/media ports: - "8096:8096" devices: - /dev/dri:/dev/dri # Intel iGPU for VAAPI hardware transcoding group_add: - "993" # render - "44" # video mem_limit: 2G healthcheck: test: ["CMD-SHELL", "curl -f http://localhost:8096/health || exit 1"] interval: 30s timeout: 10s retries: 3 start_period: 60s logging: driver: "json-file" options: max-size: "50m" max-file: "3" sonarr: image: linuxserver/sonarr:latest container_name: sonarr restart: unless-stopped environment: - PUID=1000 - PGID=1000 - TZ=America/Chicago volumes: # LOCAL disk, not NFS: SQLite-on-NFS locking crashed Sonarr's DB migration # after the 2026-07-12 power event ("waiting for user intervention") - /var/lib/sonarr:/config - /mnt/nas-media:/media ports: - "8989:8989" mem_limit: 512M healthcheck: test: ["CMD-SHELL", "curl -f http://localhost:8989/ping || exit 1"] interval: 30s timeout: 10s retries: 3 start_period: 30s logging: driver: "json-file" options: max-size: "50m" max-file: "3" radarr: image: linuxserver/radarr:latest container_name: radarr restart: unless-stopped environment: - PUID=1000 - PGID=1000 - TZ=America/Chicago volumes: - /mnt/docker-data/configs/radarr:/config - /mnt/nas-media:/media ports: - "7878:7878" mem_limit: 512M healthcheck: test: ["CMD-SHELL", "curl -f http://localhost:7878/ping || exit 1"] interval: 30s timeout: 10s retries: 3 start_period: 30s logging: driver: "json-file" options: max-size: "50m" max-file: "3" sabnzbd: image: linuxserver/sabnzbd:latest container_name: sabnzbd restart: unless-stopped environment: - PUID=1000 - PGID=1000 - TZ=America/Chicago volumes: - /mnt/docker-data/configs/sabnzbd:/config - /mnt/nas-media:/media ports: - "8082:8080" mem_limit: 1G healthcheck: test: ["CMD-SHELL", "curl -f http://localhost:8080/api?mode=version || exit 1"] interval: 30s timeout: 10s retries: 3 start_period: 30s logging: driver: "json-file" options: max-size: "50m" max-file: "3" nzbhydra2: image: linuxserver/nzbhydra2:latest container_name: nzbhydra2 restart: unless-stopped environment: - PUID=1000 - PGID=1000 - TZ=America/Chicago volumes: # LOCAL disk, not NFS: stale NFS lock on the H2 database after the # 2026-07-12 power event kept hydra unhealthy in a DB-retry loop - /var/lib/nzbhydra:/config ports: - "5076:5076" mem_limit: 1G healthcheck: test: ["CMD-SHELL", "curl -f http://localhost:5076/ || exit 1"] interval: 30s timeout: 10s retries: 3 start_period: 90s logging: driver: "json-file" options: max-size: "50m" max-file: "3" seerr: # Seerr = merged successor of Jellyseerr/Overseerr (fallenbagel/jellyseerr # is deprecated). Migrated 2026-10-17; DB auto-migrated on first start. # Runs as node (UID 1000), needs init. LOCAL disk (SQLite). Old config left # at /mnt/docker-data/configs/jellyseerr for rollback. image: seerr/seerr:v3.5.1 init: true container_name: seerr restart: unless-stopped environment: - TZ=America/Chicago volumes: - /var/lib/seerr:/app/config ports: - "5055:5055" mem_limit: 512M healthcheck: test: ["CMD-SHELL", "wget -q --spider http://localhost:5055/api/v1/status || exit 1"] interval: 30s timeout: 10s retries: 3 start_period: 90s logging: driver: "json-file" options: max-size: "50m" max-file: "3"