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

  1. Raise creation_grace to at least the minimum (5m).
  2. Leave creation_grace unset to use the default.
  3. 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

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.

Related errors


AI-assisted analysis of hashicorp/nomad@482b49bf1a (2026-09-04). Data as JSON: /api/errors/076204fcf62daa2d. Report an issue: GitHub.