{"record":{"id":"6dd9dd2c5f1d0e30","repo":"semaphoreui/semaphore","slug":"docker-executor-is-only-available-in-the-proprieta","errorCode":null,"errorMessage":"docker executor is only available in the proprietary build","messagePattern":"docker executor is only available in the proprietary build","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"pro/services/tasks/docker/config.go","lineNumber":22,"sourceCode":"// in via the top-level go.work file (or the go.mod replace directive), the same import\n// path resolves to a fully functional provider that runs each task in an ephemeral\n// container. In the open-source build this stub keeps the executor_factory and job_pool\n// imports compiling while making it explicit that the \"docker\" runner executor type\n// requires the proprietary build.\n//\n// The only entry point is NewProvider; it always fails so JobPool refuses to start\n// and the operator sees a clear message in the logs.\npackage docker\n\nimport (\n\t\"errors\"\n\n\t\"github.com/semaphoreui/semaphore/services/tasks\"\n\t\"github.com/semaphoreui/semaphore/util\"\n)\n\nfunc NewProvider(_ util.RunnerDockerConfig) (tasks.ExecutorProvider, error) {\n\treturn nil, errors.New(\"docker executor is only available in the proprietary build\")\n}\n","sourceCodeStart":4,"sourceCodeEnd":24,"githubUrl":"https://github.com/semaphoreui/semaphore/blob/1774ccb71a0a8b82eb74ea24c23ac9ab713de2fa/pro/services/tasks/docker/config.go#L4-L24","documentation":"In the open-source build of Semaphore, the Docker executor stub always returns this error. The real Docker executor implementation lives only in the proprietary build, so any attempt to instantiate a Docker executor provider from the OSS binary fails unconditionally.","triggerScenarios":"Calling pro/services/tasks/docker.NewProvider (via newExecutorProvider in services/runners/executor_factory.go) when resolveExecutorType(executorCfg) resolves to util.ExecutorTypeDocker — i.e. the runner's executor-type config is 'docker' and the binary is the open-source build.","commonSituations":"An operator configures `executor-type: docker` (or `kubernetes`/`docker` in the runner config) on a self-hosted open-source Semaphore install, unaware Docker execution requires the proprietary (EE) build.","solutions":["Switch the runner's executor-type config to 'local', the only executor supported in the open-source build","Obtain and deploy the proprietary Semaphore build, which contains the real Docker executor provider","If the proprietary build is already installed, verify the correct binary/path is being launched (an OSS binary may still be on PATH)"],"exampleFix":"# before (config.yml)\nexecutor-type: docker\n# after (open-source build)\nexecutor-type: local","handlingStrategy":"validation","validationCode":"if resolveExecutorType(executorCfg) == util.ExecutorTypeDocker {\n    return errors.New(\"docker executor requires the proprietary Semaphore build\")\n}","typeGuard":"func isOSSBuild() bool { return buildFlavor == \"oss\" }\nif isOSSBuild() && resolveExecutorType(cfg) == util.ExecutorTypeDocker { /* skip/reject */ }","tryCatchPattern":null,"preventionTips":["Only set executor-type: docker when running the proprietary build","Document build-flavor requirements in your deployment config","Validate runner config at deploy time"],"tags":["go","docker","licensing","configuration"],"backgroundTag":"feature-not-enabled","analyzedSha":"1774ccb71a0a8b82eb74ea24c23ac9ab713de2fa","analyzedAt":"2026-09-07T11:00:33.293Z","contentChangedAt":"2026-09-07T11:00:33.293Z","schemaVersion":2},"datasetVersion":"2026-09-16T09:17:16.951Z"}