Most Riven issues fall into a small number of categories: the VFS not mounting correctly, a service not being reachable, a missing environment variable, or a Docker permission problem. This page collects the symptoms, causes, and fixes for the issues reported most often. Start with the container logs — they almost always tell you exactly what went wrong:Documentation Index
Fetch the complete documentation index at: https://mintlify.com/rivenmedia/riven-ts/llms.txt
Use this file to discover all available pages before exploring further.
VFS / FUSE Issues
Mount point is empty on the host — files visible inside container only
Mount point is empty on the host — files visible inside container only
ls /mnt/riven on the host shows nothing. Files appear when you docker compose exec riven ls /mount inside the container.Cause: The host mount point was not configured with shared propagation before Docker started, so the FUSE mount Riven creates inside the container cannot propagate outward.Fix:-
Verify the host-side propagation:
-
Create and enable the systemd unit that makes the bind mount shared at boot:
/etc/systemd/system/riven-mount.service
-
Confirm the Docker volume uses
rshared(notrslaveorshared): -
Confirm
RIVEN_SETTING__vfsMountPathis set to the container-side path (/mount), not the host path (/mnt/riven).
"Transport endpoint is not connected" when accessing /mnt/riven
"Transport endpoint is not connected" when accessing /mnt/riven
/mnt/riven on the host produces Transport endpoint is not connected. The directory exists but is inaccessible.Cause: The FUSE process inside the Riven container exited or was killed, leaving the mount point in a stale state. This happens after a crash, an OOM kill, or a forced container stop.Fix: Restart the container — vfsForceMount (enabled by default) will unmount and remount cleanly:"Permission denied" on /dev/fuse or container fails to start with FUSE error
"Permission denied" on /dev/fuse or container fails to start with FUSE error
/dev/fuse or Operation not permitted in the FUSE init logs.Cause: The container is missing the SYS_ADMIN capability, the AppArmor profile is blocking FUSE operations, or the /dev/fuse device is not passed through.Fix: Ensure all three FUSE-related settings are present in your service definition:/dev/fuse exists on the host:Database Issues
Connection refused to PostgreSQL on startup
Connection refused to PostgreSQL on startup
connection refused or ECONNREFUSED pointing at the PostgreSQL host. The Riven container exits or enters a restart loop immediately.Cause: Either PostgreSQL is not yet ready when Riven starts (race condition), or the connection URL uses the wrong host.Fix:-
Ensure the
depends_onhealth check is present so Riven waits for PostgreSQL to be ready: -
Verify the
healthcheckblock is defined on theriven-dbservice: -
Check the connection URL. The host must be the Docker service name, not
localhost:
Database migration fails on startup
Database migration fails on startup
migration failed, relation already exists, or similar SQL errors shortly after startup.Cause: Running migrations against an incompatible schema state, usually after a rollback to an older image or a partial migration from a crashed startup.Fix:-
Check the full migration error:
-
Ensure you are running the latest image:
-
If the database schema is corrupted beyond repair and you have a backup, restore from it:
API Issues
Connection refused on port 3000 — container is healthy but requests fail
Connection refused on port 3000 — container is healthy but requests fail
curl http://<host-ip>:3000 gets Connection refused. The port is published in docker-compose.yml and docker compose ps shows the container as healthy. A reverse proxy (Traefik, Nginx) also fails to connect.Cause: RIVEN_SETTING__gqlHost defaults to localhost, which binds the GraphQL server to the loopback interface inside the container. Publishing the port to the Docker host has no effect because the server is not listening on the interface Docker bridges traffic to.Fix: Bind the server to all interfaces:GraphQL returns 503 or times out intermittently
GraphQL returns 503 or times out intermittently
shutdownTimeoutSeconds if you see timeout warnings during restarts.Plugin Issues
Plugin is listed in enabledPlugins but never starts
Plugin is listed in enabledPlugins but never starts
enabledPlugins.Fix: Check the startup logs for plugin-related validation errors:- Plugin name is not in
RIVEN_SETTING__enabledPlugins(names are case-sensitive) - A required API key environment variable is not set or is empty
- An API key has expired or has insufficient permissions
- The target service (Seerr, Plex, etc.) is not reachable from inside the container
"API token is not set" or similar missing-credential error
"API token is not set" or similar missing-credential error
API token is not set, apiKey is required, or a Zod validation error for a plugin setting.Cause: The RIVEN_PLUGIN_SETTING__ variable for that plugin’s API key is not set, is set to an empty string, or has a typo in the variable name.Fix: Verify the variable name format and that the value is non-empty in your .env file:.env file, recreate the container:Redis Issues
Redis connection refused or health check failing
Redis connection refused or health check failing
ECONNREFUSED pointing at the Redis host, or docker compose ps shows the Redis container as unhealthy.Cause: Redis is not running, crashed on startup, or the redisUrl points to the wrong host/port.Fix:-
Check the Redis container status and logs:
-
Verify the Redis URL uses the Docker service name:
-
Test the Redis connection from the Riven container:
-
Ensure the Redis
depends_onhealth check is configured:
Media Server Issues
Plex or Jellyfin does not see new files added by Riven
Plex or Jellyfin does not see new files added by Riven
-
Confirm the VFS is mounted and contains files:
-
Confirm the media server’s Docker volume mount uses
rslave:Notrshared, not plainro— it must berslaveso the media server receives mount propagation events from Riven’s container. - Trigger a manual library scan in your media server dashboard.
-
Ensure the plugin’s library path setting matches the path as the media server container sees it. If the volume maps the host’s
/mnt/rivento/mountinside the media server container, the plugin setting must use/mount:
Media server starts before Riven VFS is ready and marks library unavailable
Media server starts before Riven VFS is ready and marks library unavailable
Docker Issues
Riven container keeps restarting in a loop
Riven container keeps restarting in a loop
docker compose ps shows the Riven container repeatedly restarting. docker compose logs riven shows it starting and immediately exiting.Cause: A fatal startup error — typically a missing required environment variable, a service dependency that is unreachable, or a file system permission error on the logs or data directories.Fix: Read the last 50 lines of logs to find the exit reason:| Symptom in logs | Fix |
|---|---|
ZodError or validation failed | A required RIVEN_SETTING__ variable is missing or invalid |
ECONNREFUSED pointing at postgres | PostgreSQL is not healthy — check depends_on |
ECONNREFUSED pointing at redis | Redis is not healthy — check depends_on |
ENOENT on /app/logs or /app/data | Directory does not exist or is not owned by UID 1000 |
Operation not permitted on FUSE | Missing SYS_ADMIN cap or /dev/fuse device |
Container starts but immediately exits with code 137
Container starts but immediately exits with code 137