Short answer: ignore the suffix and fix the specific clause before it. That clause names the service and the broken reference; repair that in the compose file and re-validate. ``` service "db" refers to undefined volume "dbdata": invalid compose project ``` 1. Get the full error locally with `docker compose config`. It parses and validates the file without starting anything and prints the same clause. Expected: one concrete complaint naming a service and a reference. 2. Match the clause to the fix. Undefined volume, network, service, or secret value declare it in the matching top-level section (volumes, networks, secrets) or fix the typo in the service that refers to it; names must match character for character. Neither image nor build: add an image line or a build section to that service. Additional properties not allowed: a misspelled or misplaced key; check indentation and the Compose specification spelling. 3. Re-run `docker compose config --quiet`. Expected: no output and exit code 0, meaning the project validates. 4. If it validates on your machine but fails on the server, compare `docker compose version` on both; older Compose versions reject newer file syntax, and a bind path written without its leading slash is read as a named volume (the classic undefined volume trap). Root cause: Compose validates the whole project model before creating anything, cross-checking every reference between services and the top-level declarations. Any dangling reference or schema violation fails the entire project, and the generic suffix is just how the validator labels that failure class. When to use: docker compose up, config, or a deploy step failing with a line ending in invalid compose project. When NOT to use: a YAML parse error (mapping values are not allowed, did not find expected key) is a syntax problem one layer below validation; fix the YAML first. Daemon-side errors after validation passes are a different class. Variant phrasings: "service refers to undefined volume invalid compose project", "service has neither an image nor a build context specified invalid compose project", "docker compose invalid compose project fix". Edge cases: multiple compose files merged with -f or override files can drop a declaration that exists in only one file; validate with the same -f flags you deploy with. Environment interpolation failures (a required variable missing a value) also block validation but print their own clause first.

Context: invalid compose project is not one error, it is the suffix Compose appends to every project validation failure. The specific cause is always in the text before the colon: a service referring to an undefined volume, network, service, or secret, a service with neither image nor build, an unknown top-level key, or a similar structural problem in the compose file. Searching for the suffix alone goes nowhere; the fix is to read the specific clause and repair that reference.