Works on macOS and Windows (via WSL 2).
- Docker Desktop installed and running
- At least 2 GB RAM allocated to Docker (Settings > Resources)
- The embedded-database path is comfortable at 2 GB; bump to 4 GB if you run the external PostgreSQL path below
Digarr ships with an embedded database (PGlite), so the simplest path is a single container with no database setup and no secret.
docker run -d --name digarr -p 3000:3000 \
-v digarr-data:/app/data -v digarr-backups:/app/backups \
docker.io/iuliandita/digarr:latestOr with compose:
mkdir digarr && cd digarr
curl -LO https://raw.githubusercontent.com/iuliandita/digarr/main/deploy/docker/docker-compose.pglite.yml
docker compose -f docker-compose.pglite.yml up -dThen jump to Verify.
Use this path if you want Digarr to run against a separate PostgreSQL container instead of the embedded database.
mkdir digarr && cd digarr
curl -LO https://raw.githubusercontent.com/iuliandita/digarr/main/deploy/docker/docker-compose.yml
curl -LO https://raw.githubusercontent.com/iuliandita/digarr/main/deploy/docker/.env.example
mkdir -p secrets
chmod 700 secrets
# One database password -- both Postgres and the app read this single file.
(umask 077 && printf '%s\n' 'change-this-password' > secrets/postgres_password)
cp .env.example .envEdit secrets/postgres_password with a real password, and optionally edit
.env, then:
docker compose up -dmkdir digarr; cd digarr
Invoke-WebRequest -Uri "https://raw.githubusercontent.com/iuliandita/digarr/main/deploy/docker/docker-compose.yml" -OutFile "docker-compose.yml"
Invoke-WebRequest -Uri "https://raw.githubusercontent.com/iuliandita/digarr/main/deploy/docker/.env.example" -OutFile ".env"
New-Item -ItemType Directory -Force -Path "secrets"
# WriteAllText avoids the UTF-8 BOM that Set-Content adds, which would corrupt
# the password. Both Postgres and the app read this single file.
[System.IO.File]::WriteAllText("secrets/postgres_password", "change-this-password")Edit secrets/postgres_password with a real password, and optionally edit
.env, then:
docker compose up -dNote: Use PowerShell or WSL 2 terminal. The classic
cmd.exeworks but has weaker env var handling.
Open http://localhost:3000 in your browser.
You can also check container status in Docker Desktop's Containers tab
or via docker compose ps.
docker compose pull
docker compose up -d- Port conflict: If port 3000 is in use, change
PORTin.env. - Slow startup: The first pull downloads the container images. Subsequent starts reuse the local layers and are faster.
- Database errors (external PostgreSQL path only): Ensure
secrets/postgres_passwordexists, contains only the password on a single line, and has no quotes or UTF-8 BOM. If you changed the password after the first start, Postgres keeps the old one baked into its data volume -- rundocker compose down -vto reset (this wipes the database). The embedded PGlite path has no password and is not affected by this.