hashicorp/nomad · error

Unsupported isolation mode "%s"

Error message

Unsupported isolation mode "%s"

What it means

On Windows, the docker plugin validates the requested isolation mode against the supported list (process, hyperv). An isolation value outside this list fails container configuration. An empty value is defaulted to hyperv before this check, so only explicit invalid strings reach the error.

Source

Thrown at drivers/docker/driver.go:1088

			return c, fmt.Errorf("conflicting runtime requests: gpu runtime %q conflicts with task runtime %q", d.config.GPURuntimeName, containerRuntime)
		}
		containerRuntime = d.config.GPURuntimeName
	}
	if _, ok := d.config.allowRuntimes[containerRuntime]; !ok && containerRuntime != "" {
		return c, fmt.Errorf("requested runtime %q is not allowed", containerRuntime)
	}

	// Validate isolation modes on windows
	if runtime.GOOS != "windows" {
		if driverConfig.Isolation != "" {
			return c, fmt.Errorf("Failed to create container configuration, cannot use isolation mode \"%s\" on %s", driverConfig.Isolation, runtime.GOOS)
		}
	} else {
		if driverConfig.Isolation == "" {
			driverConfig.Isolation = windowsIsolationModeHyperV
		}
		if !slices.Contains(windowsIsolationModes, driverConfig.Isolation) {
			return c, fmt.Errorf("Unsupported isolation mode \"%s\"", driverConfig.Isolation)
		}
	}

	var pidsLimit int64 = -1 // default unlimited

	// Pids limit defined in Nomad plugin config.
	if d.config.PidsLimit > 0 {
		pidsLimit = d.config.PidsLimit
	}

	// Override Nomad plugin config pids limit, by user defined pids limit.
	if driverConfig.PidsLimit > 0 {
		if d.config.PidsLimit > 0 && driverConfig.PidsLimit > d.config.PidsLimit {
			return c, fmt.Errorf("pids_limit cannot be greater than nomad plugin config pids_limit: %d", d.config.PidsLimit)
		}
		pidsLimit = driverConfig.PidsLimit
	}

View on GitHub (pinned to 482b49bf1a)

Solutions

  1. Use exactly "process" or "hyperv" as the isolation value (case-sensitive).
  2. Remove the isolation option to accept the default (hyperv).
  3. Confirm the Docker daemon on the Windows host actually supports the chosen mode (hyperv requires Hyper-V enabled).

Example fix

// task docker config
// before
isolation = "default"
// after
isolation = "process"  // or "hyperv"
Defensive patterns

Strategy: validation

Validate before calling

const WINDOWS_ISOLATION_MODES = ['process', 'hyperv'];
function validateWindowsIsolation(isolation) {
  if (isolation && !WINDOWS_ISOLATION_MODES.includes(isolation)) {
    throw new Error(`Unsupported isolation mode "${isolation}"; use process or hyperv`);
  }
}

Try / catch

try {
  await client.jobs.submit(job);
} catch (err) {
  if (/Unsupported isolation mode/.test(err.message)) {
    console.error('Use isolation = "process" or "hyperv" (exact spelling)');
  }
  throw err;
}

Prevention

When it happens

Trigger: Setting isolation = "default", "hyperv-server", or any misspelled value (e.g. "HyperV", case-sensitive) in the docker task config on a Windows client.

Common situations: Typos or wrong-case values in job specs; docs from other tools (e.g. `docker run --isolation=default`) copied into Nomad config; older Windows versions lacking a supported mode.

Understand the failure class

Background: Invalid enum value errors: "Unknown type", "Invalid scope", "must be one of" — when a string is not on the library's allowed list — this error's family across 23 libraries.

Related errors


AI-assisted analysis of hashicorp/nomad@482b49bf1a (2026-09-04). Data as JSON: /api/errors/d6ea3b05edfcdbce. Report an issue: GitHub.