Skip to content

Docker

Docker Compose is the recommended deployment method for most server and NAS installs. It keeps Scryer’s config and media mounts explicit, restarts the container automatically, and makes upgrades a two-command operation.

Save this as docker-compose.yml, replacing the /path/to/... entries with your folders:

services:
scryer:
image: ghcr.io/scryer-media/scryer:latest
container_name: scryer
restart: unless-stopped
ports:
- "8080:8080"
volumes:
- scryer-config:/config
# one mount contains completed downloads and every media destination;
# see Library Layout in the Guides before changing this
- /path/to/media:/data
volumes:
scryer-config:

Optional: To run Weaver alongside Scryer, add the following service block inside the services: key and include the shared volumes: section at the end.

weaver:
image: ghcr.io/scryer-media/weaver:latest
container_name: weaver
restart: unless-stopped
ports:
- "9090:9090"
environment:
WEAVER_INTERMEDIATE_DIR: /data/intermediate
WEAVER_COMPLETE_DIR: /data/downloads
volumes:
- weaver-config:/config
# use the same host path and container path as Scryer
- /path/to/media:/data
volumes:
scryer-config:
weaver-config:

Before starting a public-facing instance, add one of the first-time boot password configurations. These support a temporary password or Docker secret, a custom administrator name, and disabling the built-in admin.

Start the stack:

docker compose up -d

Open http://localhost:8080.

After the container starts, confirm the UI opens and the setup flow loads.

When the browser reaches Scryer through a public hostname, add that browser-facing origin to the service environment so OAuth discovery never advertises the container’s internal HTTP address:

services:
scryer:
environment:
SCRYER_PUBLIC_URL: "https://scryer.example.com"

Use only the scheme, hostname, and optional port. Do not include a path. Follow Networking for complete root and subpath examples, required headers, WebSocket routing, TLS termination, and trusted-proxy configuration.

Read Library Layout before you write your volumes: section. It is the most common thing to get wrong in a Docker install, and fixing it later means re-mapping every library.

The short version: hard links require the source and destination to be inside the same container mount. Merely placing separate Docker mounts on the same physical disk is not enough. Each volumes: entry creates a mount boundary that hard links cannot cross, so a layout with one mount per role turns every import into a full copy.

Use a single parent bind mount with subdirectories for each role:

volumes:
- /host/media:/data

Then configure Scryer’s media roots and staging path as subdirectories under /data:

/data/movies
/data/series
/data/anime
/data/downloads

Configure the download client to place completed work in /data/downloads, and configure Scryer’s libraries under /data/movies, /data/series, and /data/anime. Both containers must see these paths through the same /path/to/media:/data mount.

Because completed downloads and media destinations share one mount, Scryer can hard-link files during import instead of copying them when hard-link import mode and ownership requirements permit it. If they use separate volume entries, even two bind mounts backed by the same host disk, Scryer must copy across the mount boundary. Split mounts only when downloads and media really live on different physical disks.

Within /data/movies, /data/series, and /data/anime, create one folder per library, such as Movies, Kids Movies, or Anime Movies. Library Layout explains how to choose those libraries, why splitting by quality profile should be a last resort, and how folders inside a library must be laid out.

To upgrade a Docker install, pull the latest image and restart:

docker compose pull
docker compose up -d

For all install methods, see Upgrading.

  • Import — how Scryer moves completed local items into a managed library location; requires the correct path layout to hard-link instead of copy
  • Library Scan — run this after confirming media roots are mounted correctly
  • Upgrading — full upgrade reference for all install methods