hashicorp/nomad · error
failed to parse 'image_delay' duration
Error message
failed to parse 'image_delay' duration: %v
What it means
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.
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").
Example fix
// before
plugin "docker" {
config {
gc {
image_delay = "1day"
}
}
}
// after
plugin "docker" {
config {
gc {
image_delay = "24h"
}
}
} Defensive patterns
Strategy: validation
Validate before calling
if _, err := time.ParseDuration(cfg.GC.ImageDelay); cfg.GC.ImageDelay != "" && err != nil {
return fmt.Errorf("image_delay invalid: %v", err)
} Try / catch
dur, err := time.ParseDuration(cfg.GC.ImageDelay)
if err != nil {
return fmt.Errorf("failed to parse 'image_delay' duration: %v", err)
} Prevention
- Always include unit suffixes (s/m/h).
- No 'd' for days — use "24h".
- Run nomad validate on client configs before rollout.
When it happens
Trigger: client option block for plugin "docker" sets gc { image_delay = "1hour" } or "30" (missing unit), failing time.ParseDuration.
Common situations: Missing unit suffix ("90" instead of "90s"), wrong unit names ("hours", "1d"), or templating leaving stray characters in the Nomad client config.
Understand the failure class
Background: "invalid duration" / "failed to parse duration": why your timeout, interval, or TTL string is rejected and which formats each library accepts — this error's family across 32 libraries.
- Parsing and encoding errors: unexpected token, malformed input — why parsers reject input and how to find the real culprit.
Related errors
- creation_grace is less than minimum
- failed to parse 'creation_grace' duration
- failed to parse 'infra_image_pull_timeout' duration
- failed to parse 'period' duration
- failed to parse 'pull_activity_timeout' duration
AI-assisted analysis of hashicorp/nomad@482b49bf1a (2026-09-04).
Data as JSON: /api/errors/a833bf0fe1bb6bd0.
Report an issue: GitHub.
Appendix: source
Thrown at drivers/docker/config.go:782
const danglingContainersCreationGraceMinimum = 1 * time.Minute
const pullActivityTimeoutMinimum = 1 * time.Minute
func (d *Driver) SetConfig(c *base.Config) error {
var config DriverConfig
if len(c.PluginConfig) != 0 {
if err := base.MsgPackDecode(c.PluginConfig, &config); err != nil {
return err
}
}
d.compute = c.AgentConfig.Compute()
d.config = &config
d.config.InfraImage = strings.TrimPrefix(d.config.InfraImage, "https://")
if len(d.config.GC.ImageDelay) > 0 {
dur, err := time.ParseDuration(d.config.GC.ImageDelay)
if err != nil {
return fmt.Errorf("failed to parse 'image_delay' duration: %v", err)
}
d.config.GC.imageDelayDuration = dur
}
if len(d.config.GC.DanglingContainers.PeriodStr) > 0 {
dur, err := time.ParseDuration(d.config.GC.DanglingContainers.PeriodStr)
if err != nil {
return fmt.Errorf("failed to parse 'period' duration: %v", err)
}
d.config.GC.DanglingContainers.period = dur
}
if len(d.config.GC.DanglingContainers.CreationGraceStr) > 0 {
dur, err := time.ParseDuration(d.config.GC.DanglingContainers.CreationGraceStr)
if err != nil {
return fmt.Errorf("failed to parse 'creation_grace' duration: %v", err)
}
if dur < danglingContainersCreationGraceMinimum {View on GitHub (pinned to 482b49bf1a)