docs(docker): document settings.json writable-layer + env-var semantics (#7819)#7827
docs(docker): document settings.json writable-layer + env-var semantics (#7819)#7827JohnMcLear wants to merge 1 commit into
Conversation
… semantics (#7819) Two related operator-facing docs gaps, both surfaced by #7819: 1. settings.json on disk is a *template*; env-var substitution happens at load time in memory only. Operators repeatedly mistake the templated file for a stale config because the docs never spell out that the on-disk file is intentionally unchanged by env vars. 2. The default docker-compose.yml puts settings.json in the container's writable layer with no host mount, which means admin /settings edits are silently lost on `docker compose down && up`, `pull`, or watchtower — but preserved across plain `restart`. Operators don't reliably know which compose verbs recreate the container. Adds two prose sections to doc/docker.md (explaining both gotchas, with a recreate-vs-restart table) and a commented-out `./settings.json:…` bind mount in both docker-compose.yml and the README compose example. Bind mount is opt-in so existing setups behave identically. No runtime change. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Qodo reviews are paused for this user.Troubleshooting steps vary by plan Learn more → On a Teams plan? Using GitHub Enterprise Server, GitLab Self-Managed, or Bitbucket Data Center? |
Review Summary by QodoDocument settings.json template semantics and persistence behavior
WalkthroughsDescription• Documents how settings.json template and env-var substitution interact • Explains which Docker operations preserve or reset settings.json edits • Adds optional commented bind mount for persistent admin UI edits • Clarifies that on-disk file remains unchanged by environment variables Diagramflowchart LR
A["settings.json template<br/>with placeholders"] -->|"env-var substitution<br/>at load time"| B["In-memory<br/>resolved config"]
A -->|"on-disk file<br/>unchanged"| C["Writable layer<br/>or host mount"]
D["docker restart"] -->|"preserves"| C
E["docker compose down/up"] -->|"resets"| C
F["Optional bind mount"] -->|"enables"| G["Persistent edits<br/>across recreates"]
File Changes1. doc/docker.md
|
Code Review by Qodo
Context used 1. Missing Effective tab
|
Summary
Two operator-facing documentation gaps surfaced by issue #7819:
`settings.json` is a template, not the live config. Env-var substitution happens at load time in memory only — the on-disk file always shows `${VAR:default}` placeholders regardless of what the env is set to. Operators repeatedly assume the templated file is stale and try to "fix" it.
`settings.json` lives in the container's writable layer. Admin /settings edits survive `docker restart` but are silently lost on `docker compose down && up`, `pull`, or watchtower. The compose verbs that quietly recreate the container aren't intuitive.
This PR adds:
No runtime change. Default behaviour is identical to today — the bind mount is opt-in.
Companion PR
#7826 covers the corresponding admin-UI side (explanatory banner + Effective tab + auth-error surfacing). The two PRs are independent and can land in any order.
Test plan
🤖 Generated with Claude Code