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

  1. Run the same compose command manually to see the real error output
  2. Start the container engine daemon (`systemctl start docker` or start Docker Desktop)
  3. 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

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


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)