theonedev/onedev · error · ExplicitException

No applicable provisioner discovered for current workspace.

Error message

No applicable provisioner discovered for current workspace. Please check if docker is installed on OneDev server, or configure a kubernetes provisioner if you would like workspaces to run as pods

What it means

When no provisioner is explicitly named, DefaultWorkspaceService auto-discovers an applicable enabled provisioner (docker or kubernetes). If none is found and the spec requires running in a container (spec.isRunInContainer()), it throws this ExplicitException telling you to install docker or configure a kubernetes provisioner.

Source

Thrown at server-core/src/main/java/io/onedev/server/workspace/DefaultWorkspaceService.java:761

			else if (!isApplicable(workspace, spec, provisioner))
				throw new ExplicitException("Specified workspace provisioner '" + spec.getProvisioner() + "' is not applicable for current workspace");
			else
				return provisioner;
		} else if (!settingService.getWorkspaceProvisioners().isEmpty()) {
			return settingService.getWorkspaceProvisioners().stream()
				.filter(it -> it.isEnabled() && isApplicable(workspace, spec, it))
				.findFirst()
				.orElseThrow(() -> new ExplicitException("No applicable workspace provisioner"));
		} else {
			logger.log("No workspace provisioner defined, auto-discovering...");
			var provisioner = discoverProvisioner(workspace, spec);
			if (provisioner != null) {
				logger.log("Discovered " + EditableUtils.getDisplayName(provisioner.getClass()).toLowerCase());
				return provisioner;
			}

			if (spec.isRunInContainer()) {
				throw new ExplicitException("""
					No applicable provisioner discovered for current workspace. \
					Please check if docker is installed on OneDev server, or configure \
					a kubernetes provisioner if you would like workspaces to run as pods""");
			} else {
				throw new ExplicitException("""
					No applicable provisioner discovered for current workspace. \
					Please add a shell provisioner in menu 'Administration / Workspace Provisioners'""");
			}
		}
	}

	private Future<Void> run(Workspace workspace) {
		Workspace.push(workspace);
		try {
			var spec = workspace.getSpec();
			if (spec == null)
				throw new ExplicitException("Spec not found in workspace project hierarchy");

View on GitHub (pinned to d44925c47c)

Solutions

  1. Install docker on the OneDev server and ensure the OneDev process can access it (docker group/permissions).
  2. Configure and enable a Kubernetes workspace provisioner in Administration > Workspace Provisioners.
  3. If container execution is not needed, set runInContainer: false in the job spec so the shell provisioner path applies.

Example fix

// before (job YAML)
runInContainer: true   # no docker / no k8s provisioner
// after
# either install docker on server, or:
runInContainer: false
Defensive patterns

Strategy: fallback

Validate before calling

// shell out or health-check docker before dispatching container jobs: docker info

Try / catch

try { provision(...); } catch (ExplicitException e) { if (e.getMessage().contains("No applicable provisioner")) { /* install docker or configure k8s provisioner */ } }

Prevention

When it happens

Trigger: Job spec has runInContainer: true; no named provisioner; no applicable docker provisioner (docker absent/unavailable on server) and no kubernetes provisioner configured/enabled.

Common situations: Fresh OneDev install without docker; docker daemon not running or inaccessible to OneDev user; kubernetes provisioner misconfigured/disabled; running in a container environment without docker socket access.

Related errors


AI-assisted analysis of theonedev/onedev@d44925c47c (2026-09-06). Data as JSON: /api/errors/7f37e2a72bbaf275. Report an issue: GitHub.