{"record":{"id":"6f1eb6fde0e39237","repo":"docker/cli","slug":"invalid-generic-resource-request-s-s-named-ge","errorCode":null,"errorMessage":"invalid generic-resource request `%s=%s`, Named Generic Resources is not supported for service create or update","messagePattern":"invalid generic-resource request `(.+?)=(.+?)`, Named Generic Resources is not supported for service create or update","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"cli/command/service/generic_resource_opts.go","lineNumber":42,"sourceCode":"\treturn val, nil\n}\n\n// ParseGenericResources parses an array of Generic resourceResources\n// Requesting Named Generic Resources for a service is not supported this\n// is filtered here.\nfunc ParseGenericResources(value []string) ([]swarm.GenericResource, error) {\n\tif len(value) == 0 {\n\t\treturn nil, nil\n\t}\n\n\tswarmResources, err := genericresource.Parse(value)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"invalid generic resource specification: %w\", err)\n\t}\n\n\tfor _, res := range swarmResources {\n\t\tif res.NamedResourceSpec != nil {\n\t\t\treturn nil, fmt.Errorf(\"invalid generic-resource request `%s=%s`, Named Generic Resources is not supported for service create or update\",\n\t\t\t\tres.NamedResourceSpec.Kind, res.NamedResourceSpec.Value,\n\t\t\t)\n\t\t}\n\t}\n\n\treturn swarmResources, nil\n}\n\nfunc buildGenericResourceMap(genericRes []swarm.GenericResource) (map[string]swarm.GenericResource, error) {\n\tm := make(map[string]swarm.GenericResource)\n\n\tfor _, res := range genericRes {\n\t\tif res.DiscreteResourceSpec == nil {\n\t\t\treturn nil, fmt.Errorf(\"invalid generic-resource `%+v` for service task\", res)\n\t\t}\n\n\t\t_, ok := m[res.DiscreteResourceSpec.Kind]\n\t\tif ok {","sourceCodeStart":24,"sourceCodeEnd":60,"githubUrl":"https://github.com/docker/cli/blob/4f84911bfe8811e9b028e4b1fee8e7510be79387/cli/command/service/generic_resource_opts.go#L24-L60","documentation":"Returned by ParseGenericResources (generic_resource_opts.go:42) when a parsed resource carries a NamedResourceSpec. Services can only request discrete (counted) generic resources, not named/discrete-by-identity resources; the loop at generic_resource_opts.go:40-46 explicitly rejects any entry whose NamedResourceSpec is non-nil.","triggerScenarios":"Requesting a named generic resource for a service, e.g. `--generic-resource \"GPU=device-uuid\"` where the value names a specific device rather than a count. Named resources are reserved for node advertisement, not service requests.","commonSituations":"Copying a node-advertisement format (`GPU=device1`) into a service create/update, or misunderstanding that services consume counts while nodes advertise identities.","solutions":["Request a count instead: `--generic-resource \"GPU=1\"`.","Leave named/identity resources to node labels and node advertisement (`docker node update --label-add`).","Review the generic resources design doc referenced in the source for the named-vs-discrete distinction."],"exampleFix":"// before\ndocker service create --generic-resource \"GPU=device-7\" --name svc img\n// after\ndocker service create --generic-resource \"GPU=1\" --name svc img","handlingStrategy":"validation","validationCode":"// Reject named-resource requests for services up front.\nfunc rejectNamedResources(entries []string) error {\n    res, err := genericresource.Parse(entries)\n    if err != nil { return err }\n    for _, r := range res {\n        if r.NamedResourceSpec != nil {\n            return fmt.Errorf(\"named generic resources not supported for services: %s=%s\",\n                r.NamedResourceSpec.Kind, r.NamedResourceSpec.Value)\n        }\n    }\n    return nil\n}","typeGuard":"// isDiscreteOnly reports whether all entries request counted (discrete) resources.\nfunc isDiscreteOnly(entries []string) bool {\n    res, err := genericresource.Parse(entries)\n    if err != nil { return false }\n    for _, r := range res {\n        if r.NamedResourceSpec != nil { return false }\n    }\n    return true\n}","tryCatchPattern":null,"preventionTips":["Request counts (GPU=2), not device identities, for services.","Reserve named resources for node advertisement.","Document the named-vs-discrete distinction for ops teams."],"tags":["service","generic-resource","swarm","validation","docker-cli"],"backgroundTag":null,"analyzedSha":"4f84911bfe8811e9b028e4b1fee8e7510be79387","analyzedAt":"2026-08-07T12:15:29.814Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-15T23:17:13.987Z"}