Deployment and startup problems
Use this page when Tarnished does not start, does not become healthy, or does not become reachable after deployment.
Symptoms
Common symptoms include:
- the container or pod exits immediately
- the app health check never turns healthy
- the app port is not reachable
- the migration/init step fails
- the database dependency never becomes ready
Common causes
The most common causes are:
- missing required environment variables
- port conflicts
- database startup failures
- failed migrations during startup
- invalid PostgreSQL settings
- storage or volume problems
Checks for Docker Compose installs
Check the overall service state
docker compose -f deploy/compose/docker-compose.yml ps
docker compose -f deploy/compose/docker-compose.postgres.yml ps
Inspect logs
docker compose -f deploy/compose/docker-compose.yml logs
For the PostgreSQL path:
docker compose -f deploy/compose/docker-compose.postgres.yml logs
docker compose -f deploy/compose/docker-compose.postgres.yml logs -f db
docker compose -f deploy/compose/docker-compose.postgres.yml logs -f app
Verify the app health endpoint
curl http://localhost:5577/health
Checks for Helm installs
Check the Helm release
helm status -n tarnished tarnished
Watch pods
kubectl get pods -n tarnished -w
Inspect app logs
kubectl logs -n tarnished deploy/tarnished
Inspect init-container logs
kubectl logs -n tarnished deploy/tarnished -c migrate
Fixes
Missing POSTGRES_PASSWORD
For the packaged PostgreSQL Compose install, add it to .env:
echo "POSTGRES_PASSWORD=$(openssl rand -hex 32)" > .env
Port conflict
Use a different port:
APP_PORT=8080 docker compose up -d
Bad PostgreSQL connectivity
Double-check:
- host
- port
- user
- password
- database name
Tarnished prefers DATABASE_URL if it is set. Otherwise it builds a PostgreSQL URL internally from the discrete fields.
Migration failure
Read the app or init-container logs first. Tarnished runs migrations automatically during startup, so migration failures block the app from becoming healthy.