Docker operations

Pre-built image workflow, restart vs force-recreate, and where to put API tokens.

Pulse ships as a pre-built Docker image. You load it once, mount config.yml, and run docker compose up. You do not build from source.

What runs in production

PieceRole
pulse-1.0.0-image.tar.gzThe application (load with docker load)
config.ymlYour squads, workflow status names, credentials
docker-compose.ymlStarts the container, maps port 8080, mounts config

The image is frozen at release time. To get a newer version, load a new pulse-x.y.z-image.tar.gz and run docker compose up -d (update the image tag in docker-compose.yml if needed).

restart vs force-recreate (the token gotcha)

Docker Compose injects environment variables when the container is created, not on every restart.

You changedCommandWhy
config.yml (teams, metrics, status names)docker compose restartFile is mounted; the new process re-reads it
.env (JIRA_TOKEN, etc.)docker compose up -d --force-recreateRecreates the container so new env vars apply
Secret files (JIRA_TOKEN_FILE)docker compose up -d --force-recreateSame as env vars
Pulled a new image tagdocker compose up -dRecreates if the image digest changed

docker compose restart stops and starts the same container with the same environment it had at create time.

A common failure: you fix a Jira token in .env, run restart, and Pulse still sends the old value. up -d --force-recreate fixes it.

Where to put the token

ApproachAfter token change
config.yml (jira.token:)docker compose restart
.env (JIRA_TOKEN=)docker compose up -d --force-recreate

Compose loads .env via env_file when present. Use JIRA_TOKEN= in .env, or keep the token in config.yml.

Production images run a single stable process (no auto-reload).