Troubleshooting¶
Quick fixes for common Jarvis issues. If your problem is not listed here, check the Getting Help section at the bottom.
Installation Issues¶
Docker not found¶
Symptom: docker: command not found when running the installer.
Fix: Install Docker for your platform. See the Prerequisites section of the installation guide for full commands.
Docker Compose missing¶
Symptom: docker compose returns docker: 'compose' is not a docker command.
Docker Compose v2 ships as a Docker CLI plugin. If it is missing, install it manually:
TrueNAS locks apt, so install the binary directly:
Install Docker Desktop, which bundles Compose v2.
Verify after installing:
Port already in use¶
Symptom: Container exits immediately with Bind for 0.0.0.0:<port> failed: port is already allocated.
Find what is using the port and stop it:
Common conflicts:
| Port | Jarvis Service | Common Conflict |
|---|---|---|
| 5432 | PostgreSQL | Existing PostgreSQL install |
| 6379 | Redis | Existing Redis install |
| 9000 | MinIO | MinIO or other S3-compatible tools |
Fix: Stop the conflicting process, or change the Jarvis port in ~/.jarvis/compose/.env.
Docker socket permission denied¶
Symptom: Got permission denied while trying to connect to the Docker daemon socket.
Fix: Add your user to the docker group:
Log out and back in for the group change to take full effect.
Note
On macOS with Docker Desktop, this error usually means Docker Desktop is not running. Open it from Applications.
Image pull failures¶
Symptom: Error response from daemon: pull access denied or timeout errors during install.
Possible causes:
- No internet access -- Check your network connection.
- GHCR rate limit -- GitHub Container Registry has rate limits for unauthenticated pulls. Authenticate:
- Proxy settings -- If you are behind a corporate proxy, configure Docker:
Slow service startup¶
Some services take longer to start than others. Expected startup times:
| Service | Typical Startup |
|---|---|
| PostgreSQL, Redis | 2-5 seconds |
| Config Service, Auth, Logs | 3-10 seconds |
| Command Center | 10-30 seconds (runs Alembic migrations) |
| LLM Proxy | 30-120 seconds (loads model into memory) |
If a service seems stuck, check its logs:
Tip
The LLM Proxy has a 120-second health check start period. The admin dashboard may show it as "starting" for up to two minutes while the model loads.
Service Health Issues¶
"Connection refused" errors¶
Symptom: ECONNREFUSED or Connection refused when a service tries to reach another.
Checklist:
- Is the target service running?
- Is it on the right port? Check
~/.jarvis/compose/.envfor port assignments. - Are both services on the same Docker network?
Service shows unhealthy in admin dashboard¶
Check the service logs for the specific error:
Common causes by service:
| Service | Common Cause | Fix |
|---|---|---|
| Config Service | PostgreSQL not ready | Wait for PostgreSQL to start, check DATABASE_URL |
| Auth | Database migration failed | Check PostgreSQL logs, verify connection string |
| Command Center | LLM Proxy unreachable | Start LLM Proxy first, check LLM_PROXY_URL |
| LLM Proxy | No model loaded | Download a model via the admin dashboard Models page |
| TTS | Piper model missing | Download a Piper voice model to app/models/ |
| TTS | Kokoro weights slow to download | Mount jarvis-tts-hf-cache volume so weights persist across restarts |
| TTS | Selected provider failed to load | Service falls back to Piper and logs a warning; check tts.provider and provider extras are installed |
Database migration failures¶
Symptom: Service logs show alembic errors or relation does not exist.
Causes:
- PostgreSQL not ready yet -- the service started before PostgreSQL accepted connections.
- Wrong
DATABASE_URL-- check the connection string in the service's environment.
Fix: Restart the failing service. Docker Compose health checks should handle startup ordering, but a manual restart resolves most timing issues:
If the issue persists, check that the database exists:
Authentication failures¶
Symptom: 401 Unauthorized from service-to-service calls.
Possible causes:
- App-to-app keys missing: The service is not registered in config-service, or its
JARVIS_APP_IDandJARVIS_APP_KEYenvironment variables are wrong. - JWT expired: User tokens expire. Log in again to get a fresh token.
- Admin token mismatch: The
ADMIN_API_KEYin the command center does not match what you are sending.
Fix: Re-run the installer's registration step, or check ~/.jarvis/compose/.env for the correct credentials.
Config service unreachable¶
All services depend on config-service for discovery. If config-service is down, other services will fail to start or lose the ability to find each other.
Check config-service first:
If it is not responding:
The most common cause is PostgreSQL not being ready. Check PostgreSQL:
Node Issues¶
Node cannot connect to command center¶
Symptom: Node logs show connection errors to port 7703.
Checklist:
- Is the command center running?
- Is the node's API key correct? Compare
node_idandapi_keyin the node's config file against what is registered in the command center. - Is the command center reachable from the node's network? If the node is on a different machine, use the server's IP address, not
localhost. - Check firewall rules -- port 7703 must be open for inbound TCP.
MQTT connection lost¶
Symptom: Node logs show MQTT broker not reachable or repeated reconnection attempts.
Check the Mosquitto container:
If it is not running, restart it:
The default MQTT broker port is 1883 (internal) / 1884 (external). Verify the node's MQTT config points to the correct host and port.
Commands not available after install¶
Symptom: You installed a Pantry package, but the command does not work.
The command center caches available tools. After installing a package on a node:
- Wait up to 10 minutes for the discovery refresh cycle.
- Or restart the node container to force an immediate refresh:
Check that the node reports the new command:
Voice not responding¶
Symptom: Wake word detected but no response, or no wake word detection at all.
Checklist:
- Microphone: Check that the correct audio input device is configured. Look for PyAudio errors in node logs.
- Wake word: Verify the Porcupine wake word model is loaded (check node config for
wake_wordsettings). - Whisper API: If the node sends audio to Whisper for transcription, verify Whisper is running:
- TTS: If voice responses are expected, check that TTS is running:
Common Error Messages¶
| Error | Cause | Fix |
|---|---|---|
ECONNREFUSED 127.0.0.1:7700 |
Config service not running | Start config-service first |
401 Unauthorized |
Invalid API key or expired token | Re-register node or refresh token |
pg_isready: connection refused |
PostgreSQL still starting | Wait 10-15 seconds, then retry |
MQTT broker not reachable |
Mosquitto container down | cd ~/.jarvis/compose && docker compose up -d mosquitto |
No model loaded |
LLM Proxy has no model | Download a model via admin dashboard Models page |
Bind for 0.0.0.0:PORT failed |
Port already in use | Find and stop the conflicting process (see Port already in use) |
permission denied on Docker socket |
User not in docker group | sudo usermod -aG docker $USER && newgrp docker |
relation "..." does not exist |
Database migration not run | Restart the service to re-run Alembic migrations |
Getting Help¶
If your issue is not listed here:
- Check service logs:
- Check the admin dashboard at http://localhost:7711 -- the Dashboard page shows container status and service health.
- Use the CLI health check (source installs):
- Open an issue on GitHub with:
- Your platform (macOS/Linux/TrueNAS)
- The output of
docker compose ps - Relevant service logs