stablyai/orca · error · Error
docker ${args[0]} failed: ${result.stderr} ${result.stdout}
Error message
docker ${args[0]} failed:
${result.stderr}
${result.stdout} What it means
Thrown by the docker() wrapper in run-headless-linux-pairing-docker.mjs when an invoked docker subcommand fails (non-zero status, timeout, or execFileSync throw) AND the call was not made with allowFailure:true. The wrapper re-throws a normalized message including args[0], stderr, and stdout.
Source
Thrown at config/scripts/run-headless-linux-pairing-docker.mjs:421
function docker(args, options = {}) {
try {
const stdout = execFileSync('docker', args, {
cwd: process.cwd(),
encoding: 'utf8',
maxBuffer: 50 * 1024 * 1024,
stdio: options.allowFailure ? 'pipe' : ['ignore', 'pipe', 'inherit'],
timeout: options.timeout
})
return { status: 0, stdout, stderr: '' }
} catch (error) {
const result = {
status: typeof error.status === 'number' ? error.status : 1,
stdout: String(error.stdout ?? ''),
stderr: String(error.stderr ?? error.message)
}
if (!options.allowFailure) {
throw new Error(`docker ${args[0]} failed:\n${result.stderr}\n${result.stdout}`)
}
return result
}
}
function assert(condition, message) {
if (!condition) {
throw new Error(message)
}
}
function fail(message) {
console.error(message)
process.exit(2)
}
View on GitHub (pinned to 1136503c6a)
Solutions
- Run docker info / docker ps to confirm the daemon is up and the user has access.
- Pull the image (docker pull <image.tag>) before running to avoid pull-during-run failures.
- For log-heavy calls that overflow 50MB maxBuffer, page logs or call with allowFailure:true where appropriate.
- Read result.stderr in the message to resolve the specific docker error.
Example fix
// before
docker(['run', '-d', '--name', name, image.tag])
// after
try {
docker(['run', '-d', '--name', name, image.tag])
} catch (err) {
// err.message already contains 'docker run failed:\n<stderr>\n<stdout>'
throw err
} Defensive patterns
Strategy: try-catch
Validate before calling
function dockerAvailable() {
try {
execFileSync('docker', ['info'], { stdio: 'pipe' })
return true
} catch {
return false
}
}
if (!dockerAvailable()) throw new Error('docker daemon unavailable; start Docker first') Type guard
function isDockerResult(value) {
return value != null && typeof value.status === 'number' && typeof value.stdout === 'string'
} Try / catch
try {
return docker(['run', '-d', '--name', name, image.tag, launch])
} catch (err) {
// err.message: 'docker run failed:\n<stderr>\n<stdout>'
if (/permission denied|Cannot connect to the Docker daemon/.test(err.message)) {
// start daemon / add user to docker group
}
throw err
} Prevention
- Pre-pull images so a pull failure does not masquerade as a run failure.
- For log-heavy calls, pass allowFailure:true or page logs to avoid the 50MB maxBuffer overflow.
- Guard long operations with explicit timeouts rather than relying on the wrapper default.
When it happens
Trigger: Any docker([...]) call without {allowFailure:true} that exits non-zero: docker run/rm/stop/inspect/logs/build where execFileSync throws, or where error.status is set. Also fires on the 50MB maxBuffer overflow or the configured per-call timeout.
Common situations: Docker daemon not running, permission denied (user not in docker group), image not pulled, name already in use, port already bound, maxBuffer exceeded by very chatty logs, or a timeout on a long pull.
Related errors
- --higher-is-better requires a metric key
- Usage: node config/scripts/compare-benchmark-artifacts.mjs -
- --baseline requires a path
- --candidate requires a path
- --title requires a value
AI-assisted analysis of stablyai/orca@1136503c6a (2026-08-12).
Data as JSON: /api/errors/0fac71794e8811ef.
Report an issue: GitHub.