{"record":{"id":"82e459df68365d37","repo":"docker/cli","slug":"invalid-availability-q-only-active-pause-and-dr-82e459","errorCode":null,"errorMessage":"invalid availability %q, only active, pause and drain are supported","messagePattern":"invalid availability %q, only active, pause and drain are supported","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"cli/command/swarm/join.go","lineNumber":65,"sourceCode":"\tflags.Var(&opts.listenAddr, flagListenAddr, `Listen address (format: \"<ip|interface>[:port]\")`)\n\tflags.StringVar(&opts.advertiseAddr, flagAdvertiseAddr, \"\", `Advertised address (format: \"<ip|interface>[:port]\")`)\n\tflags.StringVar(&opts.dataPathAddr, flagDataPathAddr, \"\", `Address or interface to use for data path traffic (format: \"<ip|interface>\")`)\n\tflags.SetAnnotation(flagDataPathAddr, \"version\", []string{\"1.31\"})\n\tflags.StringVar(&opts.token, flagToken, \"\", \"Token for entry into the swarm\")\n\tflags.StringVar(&opts.availability, flagAvailability, \"active\", `Availability of the node (\"active\", \"pause\", \"drain\")`)\n\treturn cmd\n}\n\nfunc runJoin(ctx context.Context, dockerCLI command.Cli, flags *pflag.FlagSet, opts joinOptions) error {\n\tapiClient := dockerCLI.Client()\n\n\tvar availability swarm.NodeAvailability\n\tif flags.Changed(flagAvailability) {\n\t\tswitch a := swarm.NodeAvailability(strings.ToLower(opts.availability)); a {\n\t\tcase swarm.NodeAvailabilityActive, swarm.NodeAvailabilityPause, swarm.NodeAvailabilityDrain:\n\t\t\tavailability = a\n\t\tdefault:\n\t\t\treturn fmt.Errorf(\"invalid availability %q, only active, pause and drain are supported\", opts.availability)\n\t\t}\n\t}\n\n\t_, err := apiClient.SwarmJoin(ctx, client.SwarmJoinOptions{\n\t\tJoinToken:     opts.token,\n\t\tListenAddr:    opts.listenAddr.String(),\n\t\tAdvertiseAddr: opts.advertiseAddr,\n\t\tDataPathAddr:  opts.dataPathAddr,\n\t\tRemoteAddrs:   []string{opts.remote},\n\t\tAvailability:  availability,\n\t})\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tres, err := apiClient.Info(ctx, client.InfoOptions{})\n\tif err != nil {\n\t\treturn err","sourceCodeStart":47,"sourceCodeEnd":83,"githubUrl":"https://github.com/docker/cli/blob/4f84911bfe8811e9b028e4b1fee8e7510be79387/cli/command/swarm/join.go#L47-L83","documentation":"Returned by 'docker swarm join' when --availability is explicitly set but the value is not active, pause, or drain (case-insensitive). The switch at join.go:61-66 mirrors the init validation.","triggerScenarios":"Running 'docker swarm join --availability <other> --token <t> <mgr>' with an invalid value such as 'drained', 'running', or a typo. Only fires when flags.Changed(flagAvailability) is true.","commonSituations":"Same vocabulary mistake as init (e.g. 'drained'); copy-pasting a different orchestrator's terminology; whitespace in the value.","solutions":["Use one of: active, pause, drain (case-insensitive).","Omit --availability to join with the default active state.","Verify spelling and remove surrounding quotes/spaces."],"exampleFix":"# before\ndocker swarm join --availability drained --token <tok> 10.0.0.5:2377\n\n# after\ndocker swarm join --availability drain --token <tok> 10.0.0.5:2377","handlingStrategy":"validation","validationCode":"validAvail := map[string]bool{\"active\": true, \"pause\": true, \"drain\": true}\nif opts.availability != \"\" && !validAvail[strings.ToLower(opts.availability)] {\n    return fmt.Errorf(\"invalid availability %q\", opts.availability)\n}","typeGuard":"func isValidAvailability(s string) bool {\n\tswitch strings.ToLower(s) {\n\tcase \"active\", \"pause\", \"drain\":\n\t\treturn true\n\t}\n\treturn false\n}","tryCatchPattern":null,"preventionTips":["Reuse the same availability validation for init and join.","Omit --availability to accept the active default.","Guard against trailing whitespace/quotes in tokens."],"tags":["swarm","join","availability","validation"],"backgroundTag":null,"analyzedSha":"4f84911bfe8811e9b028e4b1fee8e7510be79387","analyzedAt":"2026-08-07T12:15:29.814Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-15T23:17:13.987Z"}