Skip to content

Run locally with Docker

Alien edited this page Oct 18, 2026 · 1 revision

Run Dossier on your own computer with two docker run commands: one for PostgreSQL, one for the app. Nothing is reachable from other machines, and you open it at http://localhost:3000.

To keep it running for a while, Docker Compose is easier to stop, start and upgrade. To put it on a server, see Home.

What you need

  • Docker: Docker Desktop on macOS or Windows, or Docker Engine on Linux. On Linux, follow Docker's post-installation steps to run docker without sudo.
  • About 2 GB of free memory and 3 GB of disk. The image is about 1.7 GB.
  • A Unix shell: the commands below are for macOS's Terminal, Linux, or WSL on Windows.

Apple Silicon Mac: the image is built for Intel and AMD processors (linux/amd64) only. In every command below that uses ghcr.io/aientech/dossier, add --platform linux/amd64 right after docker run or docker pull. Docker Desktop then runs it under emulation, a little slower.

1. Start the database

Make a folder for Dossier, then start PostgreSQL 18 with a random password. Its files go in the dossier-db volume. Both containers join a network of their own, where the app reaches the database as dossier-db, and the app's address for it goes in dossier.env, the file that holds Dossier's settings:

mkdir ~/dossier && cd ~/dossier
DB_PASSWORD=$(openssl rand -hex 24)
docker network create dossier
docker run -d --name dossier-db --network dossier --restart unless-stopped \
  -e POSTGRES_USER=dossier -e POSTGRES_PASSWORD="$DB_PASSWORD" -e POSTGRES_DB=dossier \
  -v dossier-db:/var/lib/postgresql \
  postgres:18-alpine
echo "DATABASE_URL=postgresql://dossier:$DB_PASSWORD@dossier-db:5432/dossier" > dossier.env
chmod 600 dossier.env

2. Make the secrets

Dossier needs two more variables, DOSSIER_SECRET and DOSSIER_PASSWORD, and TZ sets its time zone. Put your own time zone in the second line:

echo "DOSSIER_SECRET=$(openssl rand -base64 32)" >> dossier.env
echo "TZ=Europe/Berlin" >> dossier.env
docker run --rm -it ghcr.io/aientech/dossier hash-password

The last command makes a hash of the password you'll sign in with. Type it twice; it prints one line that starts with argon2id:. Add that line to dossier.env as DOSSIER_PASSWORD=argon2id:…, with any text editor.

What these variables are for, and every other one: Environment variables in the README.

3. Start Dossier

docker run -d --name dossier --network dossier --restart unless-stopped \
  --env-file dossier.env -p 127.0.0.1:3000:3000 -v dossier-data:/data \
  ghcr.io/aientech/dossier
docker logs -f dossier

On every start, Dossier applies the database migrations and loads its built-in themes, then serves. Once the log says Ready, press Ctrl+C to stop following it.

Open http://localhost:3000 and sign in with your password. Then pick an AI model in Settings → AI provider (see Choosing an AI provider) and, if you like, a job source in Settings → Job search (see Choosing a job source).

Ollama on your computer: Docker Desktop reaches it at http://host.docker.internal:11434. On Linux, add --add-host host.docker.internal:host-gateway to the command above, and have Ollama listen beyond localhost (see Local model with Ollama).

Day to day

Run these in your Dossier folder.

  • Stop and start: docker stop dossier dossier-db, then docker start dossier-db dossier. Unless you stopped them, both also come back after a restart of your computer.

  • Change a setting: edit dossier.env, then remove the app container with docker rm -f dossier and run the command from step 3 again. Your data stays in the volumes.

  • Back up: export from Settings → Your data, and take a database dump. Nightly backups are in the app's volume; copy them out with docker cp:

    docker exec dossier-db pg_dump -U dossier -Fc dossier > dossier.dump
    docker cp dossier:/data/backups ./backups

    To restore a dump, stop Dossier, load the dump, and start Dossier again:

    docker stop dossier
    docker exec -i dossier-db pg_restore --clean --if-exists -U dossier -d dossier < dossier.dump
    docker start dossier

    More in Backups and restore.

  • Upgrade: take an export and a database dump first. Then pull the new image, remove the app container, and run step 3 again. See Upgrading.

    docker pull ghcr.io/aientech/dossier
    docker rm -f dossier
  • Something's wrong: docker logs dossier shows the log; see Troubleshooting.

Remove it

This deletes Dossier and everything in it, so export what you want to keep first:

docker rm -f dossier dossier-db
docker volume rm dossier-data dossier-db
docker network rm dossier

Clone this wiki locally