{"record":{"id":"a833bf0fe1bb6bd0","repo":"hashicorp/nomad","slug":"failed-to-parse-image-delay-duration-v","errorCode":null,"errorMessage":"failed to parse 'image_delay' duration: %v","messagePattern":"failed to parse 'image_delay' duration: (.+?)","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"drivers/docker/config.go","lineNumber":782,"sourceCode":"const danglingContainersCreationGraceMinimum = 1 * time.Minute\nconst pullActivityTimeoutMinimum = 1 * time.Minute\n\nfunc (d *Driver) SetConfig(c *base.Config) error {\n\tvar config DriverConfig\n\tif len(c.PluginConfig) != 0 {\n\t\tif err := base.MsgPackDecode(c.PluginConfig, &config); err != nil {\n\t\t\treturn err\n\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 {","sourceCodeStart":764,"sourceCodeEnd":800,"githubUrl":"https://github.com/hashicorp/nomad/blob/482b49bf1aec006f089bcfc7e632d8f6ac303e5e/drivers/docker/config.go#L764-L800","documentation":"The Docker driver plugin accepts an image_delay GC option that must parse as a Go time.ParseDuration string (e.g. \"30m\", \"1h\"). During SetConfig, an unparsable value for GC.ImageDelay causes the plugin config load to fail with this wrapped error, which includes the underlying parse error.","triggerScenarios":"client option block for plugin \"docker\" sets gc { image_delay = \"1hour\" } or \"30\" (missing unit), failing time.ParseDuration.","commonSituations":"Missing unit suffix (\"90\" instead of \"90s\"), wrong unit names (\"hours\", \"1d\"), or templating leaving stray characters in the Nomad client config.","solutions":["Use a valid duration string with a unit: \"30m\", \"1h\", \"2h30m\".","Fix the plugin config block and restart the Nomad client.","Remember Go duration units: ns, us, ms, s, m, h — no 'd' for days (use e.g. \"24h\")."],"exampleFix":"// before\nplugin \"docker\" {\n  config {\n    gc {\n      image_delay = \"1day\"\n    }\n  }\n}\n// after\nplugin \"docker\" {\n  config {\n    gc {\n      image_delay = \"24h\"\n    }\n  }\n}","handlingStrategy":"validation","validationCode":"if _, err := time.ParseDuration(cfg.GC.ImageDelay); cfg.GC.ImageDelay != \"\" && err != nil {\n  return fmt.Errorf(\"image_delay invalid: %v\", err)\n}","typeGuard":null,"tryCatchPattern":"dur, err := time.ParseDuration(cfg.GC.ImageDelay)\nif err != nil {\n  return fmt.Errorf(\"failed to parse 'image_delay' duration: %v\", err)\n}","preventionTips":["Always include unit suffixes (s/m/h).","No 'd' for days — use \"24h\".","Run nomad validate on client configs before rollout."],"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"}