{"record":{"id":"86a3c2b7dc7e0ade","repo":"GoogleContainerTools/skaffold","slug":"docker-deployment-not-supported-alongside-cluster","errorCode":null,"errorMessage":"docker deployment not supported alongside cluster deployments","messagePattern":"docker deployment not supported alongside cluster deployments","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"pkg/skaffold/runner/deployer.go","lineNumber":214,"sourceCode":"\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tif len(deployers) > 0 {\n\t\t\t\treturn nil, fmt.Errorf(\"kpt deployer mixed in with other deployers not supported yet. Please use only kpt deployer\")\n\t\t\t}\n\t\t\tdeployers = append(deployers, deployer)\n\t\t}\n\t\tif d.CloudRunDeploy != nil {\n\t\t\tdeployer, err := getCloudRunDeployer(dCtx.RunContext, labeller, runCtx.DeployConfigs(), configName)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tdeployers = append(deployers, deployer)\n\t\t}\n\t}\n\n\tif localDeploy && remoteDeploy {\n\t\treturn nil, errors.New(\"docker deployment not supported alongside cluster deployments\")\n\t}\n\n\treturn deploy.NewDeployerMux(deployers, runCtx.IterativeStatusCheck()), nil\n}\n\n/*\nThe \"default deployer\" is used in `skaffold apply`, which uses a `kubectl` deployer to actuate resources\non a cluster regardless of provided deployer configuration in the skaffold.yaml.\nThe default deployer will honor a select set of deploy configuration from an existing skaffold.yaml:\n  - deploy.StatusCheckDeadlineSeconds\n  - deploy.Logs.Prefix\n  - deploy.Kubectl.Flags\n  - deploy.Kubectl.DefaultNamespace\n\nFor a multi-config project, we do not currently support resolving conflicts between differing sets of this deploy configuration.\nTherefore, in this function we do implicit validation of the provided configuration, and fail if any conflict cannot be resolved.\n*/\nfunc getDefaultDeployer(runCtx *runcontext.RunContext, labeller *label.DefaultLabeller, selectors []manifest.GroupKindSelector) (deploy.Deployer, error) {","sourceCodeStart":196,"sourceCodeEnd":232,"githubUrl":"https://github.com/GoogleContainerTools/skaffold/blob/a1189de023efc32d4b8e11f395acc678aa555011/pkg/skaffold/runner/deployer.go#L196-L232","documentation":"GetDeployer distinguishes local (docker) deploys from remote (cluster) deploys; if the config requires both it returns this error, because a single apply/deploy cannot push to the local Docker daemon and a cluster at the same time via the deployer mux.","triggerScenarios":"skaffold.yaml (or merged profiles) contains a docker deploy target together with a cluster deployer (kubectl/helm/kustomize), causing localDeploy && remoteDeploy to both be true.","commonSituations":"Mixed configs with `deploy.docker` plus `deploy.kubectl`; profiles adding a docker deploy on top of a cluster baseline; teams migrating workloads between local docker and k8s.","solutions":["Keep only one deployer type per pipeline — remove either deploy.docker or the cluster deployer from skaffold.yaml","Split into separate projects/profiles and run deploy once per target (local vs cluster)","Move the local-docker workload into the cluster (e.g. a Deployment manifest) so a single cluster deployer suffices"],"exampleFix":"// before\ndeploy:\n  docker: {images: [myapp]}\n  kustomize: {paths: [k8s]}\n// after\ndeploy:\n  kustomize: {paths: [k8s]}  # single (cluster) deploy target\n","handlingStrategy":"validation","validationCode":"hasDocker, hasCluster := false, false\nfor _, d := range cfg.Deploy { if d.DockerDeploy != nil { hasDocker = true } else { hasCluster = true } }\nif hasDocker && hasCluster { return errors.New(\"skaffold.yaml mixes docker and cluster deployers; keep one target\") }","typeGuard":"func isDockerOnly(d latest.DeployConfig) bool { return d.DockerDeploy != nil && d.KubectlDeploy == nil && d.HelmDeploy == nil && d.KustomizeDeploy == nil }","tryCatchPattern":"deployer, err := runner.GetDeployer(ctx, runCtx, labeller, cfg)\nif err != nil && strings.Contains(err.Error(), \"docker deployment not supported\") {\n  return fmt.Errorf(\"split local docker and cluster deploys: %w\", err)\n}","preventionTips":["Keep deploy.docker projects separate from kubectl/helm/kustomize projects","Review profiles for deployer additions before merging","Migrate local-docker images into cluster manifests when moving to k8s"],"tags":["skaffold","docker","deployer-config"],"backgroundTag":"mixed-deployers-not-allowed","analyzedSha":"a1189de023efc32d4b8e11f395acc678aa555011","analyzedAt":"2026-09-05T12:09:27.064Z","contentChangedAt":"2026-09-05T12:09:27.064Z","schemaVersion":2},"datasetVersion":"2026-09-12T17:17:11.597Z"}