hashicorp/nomad · error
failed to parse 'creation_grace' duration: %v
Error message
failed to parse 'creation_grace' duration: %v
What it means
The dangling_containers creation_grace option must parse as a duration and must be at least danglingContainersCreationGraceMinimum (5m). This error fires when the parsed value is smaller than that minimum, rejecting configs that could cause dangling containers to be reaped while still legitimately starting.
Source
Thrown at drivers/docker/config.go:798
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 {
return fmt.Errorf("creation_grace is less than minimum, %v", danglingContainersCreationGraceMinimum)
}
d.config.GC.DanglingContainers.CreationGrace = dur
}
if len(d.config.PullActivityTimeout) > 0 {
dur, err := time.ParseDuration(d.config.PullActivityTimeout)
if err != nil {
return fmt.Errorf("failed to parse 'pull_activity_timeout' duration: %v", err)
}
if dur < pullActivityTimeoutMinimum {
return fmt.Errorf("pull_activity_timeout is less than minimum, %v", pullActivityTimeoutMinimum)
}
d.config.pullActivityTimeoutDuration = dur
}
View on GitHub (pinned to 482b49bf1a)
Solutions
- Raise creation_grace to at least the minimum (5m).
- Leave creation_grace unset to use the default.
- Check the driver constant danglingContainersCreationGraceMinimum in your Nomad version.
Example fix
// before
dangling_containers {
creation_grace = "30s"
}
// after
dangling_containers {
creation_grace = "5m"
} Defensive patterns
Strategy: validation
Validate before calling
d, err := time.ParseDuration(cfg.CreationGrace)
if err == nil && d < 5*time.Minute {
return fmt.Errorf("creation_grace must be >= 5m")
} Try / catch
dur, err := time.ParseDuration(s)
if err != nil { return err }
if dur < danglingContainersCreationGraceMinimum {
return fmt.Errorf("creation_grace is less than minimum, %v", danglingContainersCreationGraceMinimum)
} Prevention
- Keep creation_grace at or above 5m.
- Prefer the default over very small values.
- Document the floor in your config templates.
When it happens
Trigger: gc { dangling_containers { creation_grace = "1s" } } — parses fine but is below the driver's minimum.
Common situations: Users trying to aggressively GC containers by setting very small grace periods; misreading creation_grace as an unprotected setting.
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 'image_delay' duration: %v
- failed to parse 'period' 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/076204fcf62daa2d.
Report an issue: GitHub.