hashicorp/nomad · error
failed to parse 'period' duration: %v
Error message
failed to parse 'period' duration: %v
What it means
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.
Source
Thrown at drivers/docker/config.go:790
}
}
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 {
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 {View on GitHub (pinned to 482b49bf1a)
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.
Example fix
// before
dangling_containers {
period = "1 day"
}
// after
dangling_containers {
period = "24h"
} Defensive patterns
Strategy: validation
Validate before calling
if _, err := time.ParseDuration(cfg.GC.DanglingContainers.Period); cfg.GC.DanglingContainers.Period != "" && err != nil {
return fmt.Errorf("period invalid: %v", err)
} Try / catch
dur, err := time.ParseDuration(cfg.GC.DanglingContainers.PeriodStr)
if err != nil {
return fmt.Errorf("failed to parse 'period' duration: %v", err)
} Prevention
- 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.
When it happens
Trigger: client plugin config sets gc { dangling_containers { period = "weekly" } } or "3600" (unitless), which time.ParseDuration cannot parse.
Common situations: Human-friendly words like "weekly" or "1 day"; missing unit suffix; leftover unsubstituted placeholder in a config template.
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 '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/e34b9c3d7d857941.
Report an issue: GitHub.