{"record":{"id":"e34b9c3d7d857941","repo":"hashicorp/nomad","slug":"failed-to-parse-period-duration-v","errorCode":null,"errorMessage":"failed to parse 'period' duration: %v","messagePattern":"failed to parse 'period' duration: (.+?)","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"drivers/docker/config.go","lineNumber":790,"sourceCode":"\t\t}\n\t}\n\n\td.compute = c.AgentConfig.Compute()\n\td.config = &config\n\td.config.InfraImage = strings.TrimPrefix(d.config.InfraImage, \"https://\")\n\n\tif len(d.config.GC.ImageDelay) > 0 {\n\t\tdur, err := time.ParseDuration(d.config.GC.ImageDelay)\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"failed to parse 'image_delay' duration: %v\", err)\n\t\t}\n\t\td.config.GC.imageDelayDuration = dur\n\t}\n\n\tif len(d.config.GC.DanglingContainers.PeriodStr) > 0 {\n\t\tdur, err := time.ParseDuration(d.config.GC.DanglingContainers.PeriodStr)\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"failed to parse 'period' duration: %v\", err)\n\t\t}\n\t\td.config.GC.DanglingContainers.period = dur\n\t}\n\n\tif len(d.config.GC.DanglingContainers.CreationGraceStr) > 0 {\n\t\tdur, err := time.ParseDuration(d.config.GC.DanglingContainers.CreationGraceStr)\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"failed to parse 'creation_grace' duration: %v\", err)\n\t\t}\n\t\tif dur < danglingContainersCreationGraceMinimum {\n\t\t\treturn fmt.Errorf(\"creation_grace is less than minimum, %v\", danglingContainersCreationGraceMinimum)\n\t\t}\n\t\td.config.GC.DanglingContainers.CreationGrace = dur\n\t}\n\n\tif len(d.config.PullActivityTimeout) > 0 {\n\t\tdur, err := time.ParseDuration(d.config.PullActivityTimeout)\n\t\tif err != nil {","sourceCodeStart":772,"sourceCodeEnd":808,"githubUrl":"https://github.com/hashicorp/nomad/blob/482b49bf1aec006f089bcfc7e632d8f6ac303e5e/drivers/docker/config.go#L772-L808","documentation":"The dangling-containers GC period option (GC.DanglingContainers.PeriodStr) is parsed with time.ParseDuration when the driver's SetConfig runs. An invalid string makes plugin config loading fail with this error, embedding the parse failure detail.","triggerScenarios":"client plugin config sets gc { dangling_containers { period = \"weekly\" } } or \"3600\" (unitless), which time.ParseDuration cannot parse.","commonSituations":"Human-friendly words like \"weekly\" or \"1 day\"; missing unit suffix; leftover unsubstituted placeholder in a config template.","solutions":["Use a valid Go duration string such as \"5m\", \"1h\", \"168h\".","Remove days/weeks wording — Go durations only support ns/us/ms/s/m/h.","Validate the config with nomad validate before deploying."],"exampleFix":"// before\ndangling_containers {\n  period = \"1 day\"\n}\n// after\ndangling_containers {\n  period = \"24h\"\n}","handlingStrategy":"validation","validationCode":"if _, err := time.ParseDuration(cfg.GC.DanglingContainers.Period); cfg.GC.DanglingContainers.Period != \"\" && err != nil {\n  return fmt.Errorf(\"period invalid: %v\", err)\n}","typeGuard":null,"tryCatchPattern":"dur, err := time.ParseDuration(cfg.GC.DanglingContainers.PeriodStr)\nif err != nil {\n  return fmt.Errorf(\"failed to parse 'period' duration: %v\", err)\n}","preventionTips":["Use only Go duration units ns/us/ms/s/m/h.","Avoid human words like 'weekly' in configs.","Validate agent config at startup with nomad validate."],"tags":["docker","duration","config","nomad"],"backgroundTag":"invalid-duration-format","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"}