quarkusio/quarkus · critical · RuntimeException
Docker Compose not found. Is ${composeExecutable} on the PAT
Error message
Docker Compose not found. Is ${composeExecutable} on the PATH? What it means
ComposeRunner.run() first verifies the configured compose executable exists on the PATH via CommandLine.executableExists(). If not found it throws RuntimeException("Docker Compose not found. Is <composeExecutable> on the PATH?"), aborting the DevServices startup that depends on compose.
Source
Thrown at extensions/devservices/deployment/src/main/java/io/quarkus/devservices/deployment/compose/ComposeRunner.java:85
}
/**
* Set the profiles to use when running the command.
*
* @param profiles the profiles
* @return this
*/
public ComposeRunner withProfiles(List<String> profiles) {
this.profiles = Collections.unmodifiableList(profiles);
return this;
}
/**
* Run the compose command.
*/
public void run() {
if (!CommandLine.executableExists(composeExecutable)) {
throw new RuntimeException("Docker Compose not found. Is " + composeExecutable + " on the PATH?");
}
if (composeFiles.isEmpty()) {
LOG.info("No compose files specified");
return;
}
LOG.infov("Compose is running command: {0} {1}", composeExecutable, cmd);
final File pwd = composeFiles.get(0).getAbsoluteFile().getParentFile().getAbsoluteFile();
ProcessBuilder.newBuilder(composeExecutable)
.directory(pwd.toPath())
.arguments(cmd.split("\\s+"))
.modifyEnvironment(env -> {
env.putAll(additionalEnvVars);
env.put(PROJECT_NAME_ENV, identifier);View on GitHub (pinned to e1c734241f)
Solutions
- Install Docker Compose (plugin: docker-compose-plugin / 'docker compose' subcommand, or standalone docker-compose) and ensure it is on PATH
- Verify with 'docker compose version' (or 'docker-compose version') in the same shell/environment running Quarkus
- If using a custom executable, set the composeExecutable configuration to an absolute path or install the named binary
- Use Podman Compose alternatives that expose a docker-compatible compose command and point composeExecutable at it
- Set quarkus.devservices.enabled=false only if you supply your own infrastructure instead
Example fix
# before quarkus.devservices.compose.executable=compose # binary not installed # after (after installing docker compose plugin) quarkus.devservices.compose.executable=docker # resolved via 'docker compose' # or simply ensure 'docker compose version' works before starting the app
Defensive patterns
Strategy: fallback
Validate before calling
// preflight before starting the app
for (String exe : List.of("docker", "docker")) {
if (new ProcessBuilder(exe, "compose", "version").start().waitFor() != 0)
throw new IllegalStateException("Docker Compose plugin required");
} Type guard
static boolean composeAvailable(String executable) {
return CommandLine.executableExists(executable);
} Try / catch
try {
app.start();
} catch (RuntimeException e) {
if (e.getMessage() != null && e.getMessage().contains("Docker Compose not found")) {
installComposeOrDisableDevServices();
} else throw e;
} Prevention
- Install docker-compose-plugin in dev machines and CI images
- Run 'docker compose version' as a CI preflight step
- Point composeExecutable at an absolute path for non-standard installs
- Set quarkus.devservices.enabled=false only when external infra is guaranteed
When it happens
Trigger: Starting an application whose DevServices uses Docker Compose when neither 'docker compose' nor 'docker-compose' is installed; or when composeExecutable is set to a custom binary name/path that is not resolvable.
Common situations: Fresh machines or CI containers with Docker Compose plugin missing; minimal Docker installs (only daemon, no compose plugin); custom composeExecutable like 'podman-compose' not installed or not on PATH in the build environment.
Related errors
- Services have not been started yet
- Services named ${servicesToWaitFor} do not exist, but wait c
- Unsupported port format: ${port}
- Unable to find command: %s in $PATH: %s
- Cannot create a RunningDevServicesDatasource before the H2 d
AI-assisted analysis of quarkusio/quarkus@e1c734241f (2026-09-05).
Data as JSON: /api/errors/13a7e36db83a0ede.
Report an issue: GitHub.