Skip to main content
Mount a fixed configuration file with Compose configs. Use a named volume and editable configuration files if the app or its owner must change the file.
Keep passwords, tokens, and private keys out of configs.content. Use environment variables and secrets for credentials.

Declare the file and mount it

This complete example runs Gatus with a status check and persistent SQLite history:
zenith-compose.yml
Gatus reads /config/config.yaml from a read-only config mount. Its check history stays on the separate gatus_data volume. Only services that reference gatus-config receive the file. Use inline content for the file contents. File-backed and external config sources are unsupported. See Compose configs for supported fields and defaults.
Standard Compose configs is a top-level map next to services. Use x-zenith.configs for files users can edit in Zenith.

Apply config changes

When Zenith applies an updated config definition, it restarts the services that consume the changed content. It does not update a running process’s mounted file in place. Pushing a Git commit does not automatically update an existing deployment.

Preserve environment references

Zenith does not substitute x-zenith.env values into config content. If your app expands environment variables itself, write $$ to preserve a literal $ through Compose loading. For runtime-generated content, keep the app’s startup code that creates the file. For writable configuration, use a named volume.