Skip to content
DocumentationAPI ReferenceChangelog
Self-hostedTalon Studio v1.0.2-beta

Troubleshooting

Symptom first: what you see, why it happens, and how to get back. Container won't start, the page won't load, a migration fails, the key screen won't go away, pySigma or the content library is missing, or nobody can sign in.

The container won't start

docker compose ps shows it cycling between Restarting and Exited. The usual cause is the startup security check: published images refuse to start while a placeholder or weak secret, or a well-known admin password, is configured. The log opens with Refusing to start: insecure configuration and names each problem.

That is typically an .env copied from an older example. Delete those lines — the container then generates the values on first boot — or set real ones with openssl rand -hex 32. If the install already stored credentials, keep its existing TALON_ENCRYPTION_KEY: a new one cannot decrypt them, or your Talon key.

Without that block, the entrypoint printed one of these before the app ever started:

TALON_DISABLE_EMBEDDED_PG=true requires POSTGRES_URL to be set
External-database mode with no connection string. Set POSTGRES_URL.
External database is not reachable (check POSTGRES_URL)
It waited 60 seconds for the external Postgres. Check the network path, the credentials and sslmode.
Embedded Postgres did not become ready
The embedded database did not start within 60 seconds. Check the /data volume's free space and ownership; the Postgres error is just above this line in docker compose logs.
pySigma service failed to start
The sidecar did not answer within 60 seconds — see pySigma is unavailable.

The page won't load

The container is Up, but the browser or your load balancer cannot reach it, or reports it unhealthy. Three endpoints tell you which layer is failing:

GET /api/health/live
The process is running. Nothing else. No auth.
GET /api/health
Readiness: Postgres, pySigma and Git storage all usable. 503 not_ready otherwise. No auth. The compose healthcheck polls this one.
GET /api/health?detailed=1
Each service separately, content counts, licence and version. Signed in, or with the TALON_METRICS_TOKEN bearer.
terminal
curl -s localhost:3000/api/health
curl -s -H "Authorization: Bearer $TALON_METRICS_TOKEN" "localhost:3000/api/health?detailed=1"
db: error — Postgres is unreachable. Check the embedded Postgres lines in the log and the space on /data; for an external database, POSTGRES_URL.
sigma: error — pySigma is unavailable.
git_storage: error — the repository path is not writable. Check the volume mount and free space.
ready, but still no page — the network or the proxy, not the app. Check NEXTAUTH_URL, the proxy's upstream (127.0.0.1:3000) and Security Hardening.

Docker does not restart a container for being unhealthy; it only marks it. The logs are where the answer is.

A migration fails

The container exits with Migration failed in the log, just after Running database migrations. Migrations run on every start, before the app; a failure stops the entrypoint, and the restart policy retries — skipping what already applied. The error above that line is the real one. The usual causes:

The Postgres user lacks permission for the migration's DDL (an external database).
The disk under /data/postgres is full.
The volume was restored from a backup taken with a newer image than the one running now.

If it cannot be fixed in place, stop booting forward: pin the previous tag and restore the pre-upgrade backup — Upgrading → Rolling back.

Stuck on the key screen

Every page opens on the License page, and the API answers 403 licence_required. The reason on that page says which of these it is:

No key
A new install, or a key that was removed. An admin pastes the Community key from the Talon Labs account; anyone else is told an admin needs to. Or set TALON_LICENSE_KEY and restart.
It could not be decrypted
The stored key is encrypted with TALON_ENCRYPTION_KEY, and that key changed — typically a restore, or a cloud bootstrap whose .env did not come across. Put the original encryption key back if you have it (the stored SIEM and AI credentials need it too); otherwise paste your Talon key again.
It does not verify
The key is malformed, for another product, or signed by a key this image does not trust — an image not built by Talon Labs trusts none. Paste the current key from your account.

Nothing is deleted while the key screen is up: agents and outgoing notifications pause, and syncs keep running. An Enterprise key that expires or is revoked never causes this — it returns the instance to the Community Edition instead. Licensing has the whole table.

pySigma is unavailable

Sigma translation or validation fails in Forge or Validate with Sigma service unavailable, or /api/health reports sigma: error. pySigma runs inside the container on 127.0.0.1:8001, and readiness counts it, so the whole appliance reads not_ready while it is down — though anything that reads stored data (detections, the library, SOC, Connect, coverage) still works.

terminal
docker compose exec app curl -fsS http://127.0.0.1:8001/health

Nothing restarts pySigma on its own if it dies mid-run; docker compose restart brings it back. If it never comes up at boot, the log around Starting embedded pySigma service has the Python error.

The content library stays empty

SigmaHQ, Splunk Security Content, Atomic Red Team and the rest never populate, or stop updating, and Settings → App Logs shows sync failed under content-sync. The sync clones those repositories at startup and then hourly; on a network that cannot reach GitHub, every attempt fails.

It never blocks startup or crashes the app — it logs and tries again next hour — but content.last_synced in /api/health?detailed=1 stops moving and the detailed status reads degraded. Point the sources at internal mirrors, or turn the sync off: Offline and air-gapped has both.

Locked out

A user forgot their password
Another admin resets it from Settings → Users & teams: a temporary password, shown once, changed at next sign-in. Forgot password on the sign-in page sends no email — Studio has none — but notifies every admin that someone asked. SSO users reset with their identity provider.
A user lost their authenticator
A recovery code signs them in once in place of a code. Without one, another admin uses Reset MFA on their row. An admin cannot reset their own MFA there.
The only admin is locked out
There is no recovery path in the image today — no reset command ships in it. Keep a second admin, with their own authenticator, so this cannot happen; if it already has, contact support.

Before you ask for help

There is no one-click support bundle yet. Collect these:

terminal
docker compose logs app --since 24h > talon-logs.txt
curl -s -H "Authorization: Bearer $TALON_METRICS_TOKEN" \
"localhost:3000/api/health?detailed=1" > talon-health.json
docker compose images app

Add your docker-compose.yml and .env with every secret removed, and the exact log lines around the failure — the format (<time> LEVEL [context] event - key=value) is meant to be pasted. Send them through the contact form.