hashicorp/nomad · error
failed to parse 'image_delay' duration: %v
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.
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)
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
- failed to parse 'period' duration: %v
- failed to parse 'creation_grace' duration: %v
- creation_grace is less than minimum, %v
- failed to parse 'pull_activity_timeout' duration: %v
- pull_activity_timeout is less than minimum, %v
AI-assisted analysis of hashicorp/nomad@482b49bf1a (2026-09-04).
Data as JSON: /api/errors/a833bf0fe1bb6bd0.
Report an issue: GitHub.