Skip to main content
datris doctor checks a running deployment for the failure modes that are cheap to detect and expensive to miss: a Vault token about to expire, an AI slot secret missing so the server won’t boot after an upgrade, an embedding model that was never pulled, a disk about to fill, data sitting on an anonymous Docker volume, a container still running with an old .env, a mixed-version stack. Every finding names the command that fixes it. Doctor never changes anything.

Where it runs

The server-side report is also available at GET /api/v1/doctor for scripts. It is not a public endpoint — it names environment keys, Vault paths and model ids — so an API key with config:read is required when API keys are on.

The checks

Checks below the line run only from the CLI on the machine running Docker; the UI and MCP surfaces report them as not applicable. Secret values never appear in any output — only key names.

CLI

Run it from the directory that holds docker-compose.yml and .env, or point it there with --project-dir (and --compose-file for the standalone file). Unlike the other CLI commands, doctor talks to the server directly rather than through the MCP server — a dead MCP server is itself a finding. Set DATRIS_URL if the server is not on http://localhost:8080, and DATRIS_API_KEY when API keys are on. Exit codes make it scriptable: Skipped checks (Docker not on this machine, a service not running) never affect the exit code.

Before an upgrade

This runs the host checks plus a read of the three AI slot secrets through the vault container, so a missing secret is caught before the new server crash-loops on it, and an anonymous volume is caught before --remove-orphans could drop it. When nothing is at error level it prints the upgrade command. See Upgrading.

Report format

All surfaces produce the same JSON:
status is one of ok, warn, error, skip; surface is server, host, or cli.

Turning off the boot-time lines

The startup subset only logs; it never blocks a start. To silence it, set DOCTOR_ONSTARTUP=false in the datris service environment. The on-demand surfaces are unaffected.