jdx/mise · error
compose command failed with
Error message
compose command failed with {status} What it means
Thrown by `run_command` (used by `run_action`) when a compose/docker engine subprocess exits with a non-zero status. The error carries the raw exit status; the underlying compose output (already logged via info!) explains the actual failure.
Solutions
- Run the same compose command manually to see the real error output
- Start the container engine daemon (`systemctl start docker` or start Docker Desktop)
- Fix the underlying compose issue (port conflict, missing image, bad YAML) and retry
Defensive patterns
Strategy: try-catch
Validate before calling
# preflight the compose command manually docker compose -f docker-compose.yml config -q
Try / catch
match run_action(...) {
Err(e) if e.contains("compose command failed") => {
eprintln!("compose failed; run the command manually for details");
}
other => other?,
} Prevention
- Ensure the docker daemon is running before mise tasks
- Validate compose files with `docker compose config`
- Check for port conflicts and image availability up front
When it happens
Trigger: Any compose action (up, down, etc.) whose underlying `docker compose` command fails: invalid compose file, port conflicts, image pull failures, engine daemon not running, insufficient resources.
Common situations: Docker daemon stopped; compose file syntax errors; ports already bound; image not found/pull denied; out-of-disk or permission problems.
Related errors
- command exited with non-zero status
- command exited with non-zero status
- failed: exit code
- failed
- hook command failed
AI-assisted analysis of jdx/mise@533346cc37 (2026-09-17).
Data as JSON: /api/errors/0ba7fa81a6e29ab8.
Report an issue: GitHub.
Appendix: source
Thrown at src/system/compose.rs:698
args.extend(self.action_args());
let mut commands = vec![(program, args)];
if let Some(command) = orphan_removal {
commands.push(command);
}
commands
}
fn run_command(&self, program: &str, args: &[String]) -> Result<()> {
if self.sudo {
crate::system::sudo::run(program, args, &compose_env())
} else {
info!("$ {} {}", program, shell_words::join(args));
let status = Command::new(program)
.args(args)
.envs(compose_env())
.status()?;
if !status.success() {
bail!("compose command failed with {status}");
}
Ok(())
}
}
fn stopped_orphan_removal_command(&self) -> Result<Option<(String, Vec<String>)>> {
let Some(args) = self.stopped_orphan_removal_args() else {
return Ok(None);
};
let command = self.resolved_engine_command()?;
command_with_args(command, args).map(Some)
}
fn dry_run_stopped_orphan_removal_command(&self) -> Result<Option<(String, Vec<String>)>> {
let Some(args) = self.stopped_orphan_removal_args() else {
return Ok(None);
};
command_with_args(self.configured_engine_command(), args).map(Some)View on GitHub (pinned to 533346cc37)