Skip to main content

Common error messages

A lookup from the text you see in a log or the browser to what it means and where to fix it. Get the text with docker compose logs <service> (see how to read the logs).

Startup and configuration

You seeCauseFix
Invalid environment: followed by a field nameA required .env value is missing or malformed; the api exits rather than run half-configuredSet the named value. See install and startup.
JWT_SECRET: String must contain at least 16 character(s)The session-signing secret is blank or too shortSet a strong 16+ character value: openssl rand -hex 32, or regenerate with the builder.
TENANT_CREDS_ENCRYPTION_KEY: String must contain at least 16 character(s)The credential-encryption key is blank or too shortSet a strong value, but read the key warning before changing it on an instance that already stored credentials.
Malformed encrypted credential payloadA stored credential is being read with a different TENANT_CREDS_ENCRYPTION_KEY than it was written withRestore the original key, or reconnect the integration and re-enter its secret. See Secrets and keys.
The api container restarts and a log line names a .sql fileA database migration failed on bootRead the SQL error under it; check disk space and that images are current. See migration failed on boot.
address already in use on docker compose upAnother process holds the web port (8088 by default)Free the port or set WEB_PORT in .env. See port already in use.

Images and registry

You seeCauseFix
denied or unauthorized on docker compose pullUsually a wrong image reference or COBBLR_VERSION tag, not a permission problem: the images are publicCheck the image lines and COBBLR_VERSION against what the setup builder generated. See image pull is denied.

HTTPS and the proxy

You seeCauseFix
unknown COBBLR_TLS_MODE '...' in caddy logsThe TLS mode is misspelledUse duckdns, cloudflare, internal, or tsnet.
To authenticate, visit: https://login.tailscale.com/... in caddy logsNot an error. The Tailscale (tsnet) node is waiting for you to approve it, which is the default when no TS_AUTHKEY is setOpen the link and approve the node. Find it again with docker compose logs caddy | grep -iE 'to authenticate|login.tailscale'. See tsnet never comes up.
A Caddyfile parse error on a bare email lineAn older image with a blank COBBLR_ACME_EMAILPull the current image (it self-heals) or set COBBLR_ACME_EMAIL. See caddy crash-loops.
A certificate error for DuckDNS or Cloudflare in caddy logsWrong DNS token, or the box has no outbound internetFix the token or connectivity; certificates cache after the first issue. See the certificate didn't issue.

Access

You seeCauseFix
The camera never opens on your phoneThe camera requires HTTPS or localhost; a plain LAN address isn't secureTurn on HTTPS, or scan on the box at localhost. See the phone camera is blocked.
A public name resolves but the page won't loadDNS rebind protection is refusing a public name that points at a private IPAdd an exception or a local DNS entry. See a name resolves but won't load.
Signup is closed and nobody can sign inClosed signup with no operator accountRecoverable with one .env edit, since you own the box. See Operating.

If your symptom isn't here, the health check and docker compose logs narrow it to a container fast.