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
- Install docker on the OneDev server and ensure the OneDev process can access it (docker group/permissions).
- Configure and enable a Kubernetes workspace provisioner in Administration > Workspace Provisioners.
- 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
- Ensure docker is installed and accessible on the server before enabling container jobs.
- Pre-configure a kubernetes provisioner for pod-based workspaces.
- Health-check the docker daemon as part of server monitoring.
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
- This workspace can only be provisioned by shell provisioner
- Specified workspace provisioner '${provisioner}' is disabled
- No applicable provisioner discovered for current workspace.
- OneDev running inside kubernetes cluster does not support wo
- Docker container exited with code ${returnCode}
AI-assisted analysis of theonedev/onedev@d44925c47c (2026-09-06).
Data as JSON: /api/errors/7f37e2a72bbaf275.
Report an issue: GitHub.