{"record":{"id":"905fdefe10343a94","repo":"docker/cli","slug":"unknown-mode-s","errorCode":null,"errorMessage":"unknown mode: %s","messagePattern":"unknown mode: (.+?)","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"cli/compose/convert/service.go","lineNumber":653,"sourceCode":"\tcase \"global-job\":\n\t\tif replicas != nil {\n\t\t\treturn serviceMode, errors.New(\"replicas can only be used with replicated or replicated-job mode\")\n\t\t}\n\t\tserviceMode.GlobalJob = &swarm.GlobalJob{}\n\tcase \"global\":\n\t\tif replicas != nil {\n\t\t\treturn serviceMode, errors.New(\"replicas can only be used with replicated or replicated-job mode\")\n\t\t}\n\t\tserviceMode.Global = &swarm.GlobalService{}\n\tcase \"replicated-job\":\n\t\tserviceMode.ReplicatedJob = &swarm.ReplicatedJob{\n\t\t\tMaxConcurrent:    replicas,\n\t\t\tTotalCompletions: replicas,\n\t\t}\n\tcase \"replicated\", \"\":\n\t\tserviceMode.Replicated = &swarm.ReplicatedService{Replicas: replicas}\n\tdefault:\n\t\treturn serviceMode, fmt.Errorf(\"unknown mode: %s\", mode)\n\t}\n\treturn serviceMode, nil\n}\n\nfunc convertDNSConfig(dns []string, dnsSearch []string) *swarm.DNSConfig {\n\tif len(dns) > 0 || len(dnsSearch) > 0 {\n\t\treturn &swarm.DNSConfig{\n\t\t\tNameservers: toNetipAddrSlice(dns),\n\t\t\tSearch:      dnsSearch,\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc toNetipAddrSlice(ips []string) []netip.Addr {\n\tif len(ips) == 0 {\n\t\treturn nil\n\t}","sourceCodeStart":635,"sourceCodeEnd":671,"githubUrl":"https://github.com/docker/cli/blob/4f84911bfe8811e9b028e4b1fee8e7510be79387/cli/compose/convert/service.go#L635-L671","documentation":"Returned by convertDeployMode's default branch when deploy.mode is not one of 'global-job', 'global', 'replicated-job', or 'replicated' (service.go:631-655). For Swarm conversion the deploy mode must be a recognized service mode.","triggerScenarios":"Setting deploy.mode to an unsupported string. Reached at service.go:652 default case after the four valid cases plus empty string (treated as replicated) fail to match.","commonSituations":"Typo such as 'replica' or 'globalized'; using a mode valid only for `docker compose` (non-Swarm) deployments; leftover experimental mode names.","solutions":["Set deploy.mode to 'replicated', 'global', 'replicated-job', or 'global-job'.","Omit deploy.mode to default to replicated.","Remember 'replicas' is only valid with 'replicated'/'replicated-job' (other modes reject it)."],"exampleFix":"// before\ndeploy:\n  mode: replica\n  replicas: 3\n// after\ndeploy:\n  mode: replicated\n  replicas: 3","handlingStrategy":"validation","validationCode":"var validDeployModes = map[string]bool{\n    \"\": true, \"replicated\": true, \"global\": true, \"replicated-job\": true, \"global-job\": true,\n}\nfunc validateDeployModes(cfg *composetypes.Config) error {\n    for _, svc := range cfg.Services {\n        if m := svc.Deploy.Mode; !validDeployModes[m] {\n            return fmt.Errorf(\"unknown mode: %s\", m)\n        }\n    }\n    return nil\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Use only replicated/global/replicated-job/global-job for deploy.mode (omit for replicated).","Remember replicas are only valid with replicated/replicated-job.","Lint deploy.mode in CI."],"tags":["compose","convert","deploy-mode","swarm","deploy"],"backgroundTag":null,"analyzedSha":"4f84911bfe8811e9b028e4b1fee8e7510be79387","analyzedAt":"2026-08-07T12:15:29.814Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-15T23:17:13.987Z"}