Compose file validator
Check a Docker Compose file and its override files for broken service, network, volume, secret and config references, unset variables and host port clashes. You get the line of each problem and the merged result.
Up to 500,000 characters in total, 10 files and 100,000 characters of variables. Everything runs on your device in a background worker. Downloads: JSON report, CSV findings, SARIF 2.1.0 and the merged compose.resolved.yaml. Paste compose.yaml. Put each override file after a line of three dashes. Up to 500,000 characters. Review the settings before running.
Your result
How to use Compose file validator
- Paste compose.yaml. Add override files after it, each starting with a line of three dashes.
- Optionally paste the .env variables Compose would use.
- Run the check and review each finding with its file and line.
- Download the JSON report, CSV, SARIF or the merged Compose file.
Useful next steps
What is checked
Happytails.ai checks the keys and references described in the Compose Specification (github.com/compose-spec/compose-spec, Apache-2.0, read on 16 October 2026). It looks for services, networks, volumes, secrets and configs that are used but not declared, depends_on cycles, services without an image or build, and common type mistakes such as a list where a mapping belongs.
Variables and override files
Values are interpolated like Compose does: ${NAME}, ${NAME:-default}, ${NAME-default}, ${NAME:?error}, ${NAME:+value} and $$ for a literal dollar sign. Unset variables become empty text and are reported. Override files are merged in order: mappings merge, command and entrypoint are replaced, ports, volumes, secrets and configs merge by their target, and other lists are appended. Line numbers count from the top of the box, so a finding in an override file shows the line where you see it.
Coverage and limits
The key lists are an authored subset written from the specification, not the full compose-spec JSON Schema, so an unknown key is a warning rather than a hard error. Port clashes are checked for fixed one-to-one mappings on overlapping addresses. Profiles, include files on disk, the !reset and !override tags and the image contents are not read.