{"record":{"id":"9e99b5435c9397fa","repo":"hashicorp/nomad","slug":"check-q-cannot-use-address-mode-alloc-only-che","errorCode":null,"errorMessage":"check %q cannot use address_mode=\"alloc\", only checks defined in a \"group\" service block can use this mode","messagePattern":"check %q cannot use address_mode=\"alloc\", only checks defined in a \"group\" service block can use this mode","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"nomad/structs/structs.go","lineNumber":8527,"sourceCode":"\t\t\t\taddServicePort(service.PortLabel, service.Name)\n\t\t\t}\n\t\t}\n\n\t\t// connect block is only allowed on group level\n\t\tif service.Connect != nil {\n\t\t\tmErr.Errors = append(mErr.Errors, fmt.Errorf(\"service %q cannot have \\\"connect\\\" block, only services defined in a \\\"group\\\" block can\", service.Name))\n\t\t}\n\n\t\t// Ensure that check names are unique and have valid ports\n\t\tknownChecks := make(map[string]struct{})\n\t\tfor _, check := range service.Checks {\n\t\t\tif _, ok := knownChecks[check.Name]; ok {\n\t\t\t\tmErr.Errors = append(mErr.Errors, fmt.Errorf(\"check %q is duplicate\", check.Name))\n\t\t\t}\n\t\t\tknownChecks[check.Name] = struct{}{}\n\n\t\t\tif check.AddressMode == AddressModeAlloc {\n\t\t\t\tmErr.Errors = append(mErr.Errors, fmt.Errorf(\"check %q cannot use address_mode=\\\"alloc\\\", only checks defined in a \\\"group\\\" service block can use this mode\", service.Name))\n\t\t\t}\n\n\t\t\tif check.AddressMode == AddressModeAllocIPv6 {\n\t\t\t\tmErr.Errors = append(mErr.Errors, fmt.Errorf(\"check %q cannot use address_mode=\\\"alloc_ipv6\\\", only checks defined in a \\\"group\\\" service block can use this mode\", service.Name))\n\t\t\t}\n\n\t\t\tif !check.RequiresPort() {\n\t\t\t\t// No need to continue validating check if it doesn't need a port\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\teffectivePort := check.PortLabel\n\t\t\tif effectivePort == \"\" {\n\t\t\t\t// Inherits from service\n\t\t\t\teffectivePort = service.PortLabel\n\t\t\t}\n\n\t\t\tif effectivePort == \"\" {","sourceCodeStart":8509,"sourceCodeEnd":8545,"githubUrl":"https://github.com/hashicorp/nomad/blob/482b49bf1aec006f089bcfc7e632d8f6ac303e5e/nomad/structs/structs.go#L8509-L8545","documentation":"A check may only use address_mode=\"alloc\" when its parent service is defined in a \"group\" block. Like services, checks resolve the allocation address only in group context; task-level checks must use driver/host addressing. The error (using the service's name) is appended during service validation.","triggerScenarios":"Submitting a job with a check inside a task-level service where check.address_mode = \"alloc\" (AddressModeAlloc).","commonSituations":"Mirroring a group-level check configuration into a task; assuming check address_mode is independent of service placement; IPv6/alloc-mode experimentation in the wrong scope.","solutions":["Remove address_mode=\"alloc\" from the check, or change it to \"host\"/\"driver\".","Move the parent service to the group level if alloc addressing is genuinely required.","Run `nomad job validate` to verify all address modes resolve correctly."],"exampleFix":"// before\ntask \"app\" {\n  service {\n    name = \"api\"\n    check { name = \"live\"; address_mode = \"alloc\"; port = \"8080\" }\n  }\n}\n\n// after\ntask \"app\" {\n  service {\n    name = \"api\"\n    check { name = \"live\"; port = \"8080\" }\n  }\n}","handlingStrategy":"validation","validationCode":"for taskLevelChecks {\n  if c.AddressMode == \"alloc\" {\n    return fmt.Errorf(\"check %q: alloc address_mode requires a group-level service\", c.Name)\n  }\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Do not set address_mode on checks under task-level services","Centralize alloc-mode checks in group-level service blocks","Validate the job before submission in CI"],"tags":["nomad","health-check","address-mode","service-validation"],"backgroundTag":"invalid-service-address-mode","analyzedSha":"482b49bf1aec006f089bcfc7e632d8f6ac303e5e","analyzedAt":"2026-09-04T07:54:14.808Z","contentChangedAt":"2026-09-04T07:54:14.808Z","schemaVersion":2},"datasetVersion":"2026-09-08T10:18:20.063Z"}