hashicorp/nomad · error

creation_grace is less than minimum, %v

Error message

creation_grace is less than minimum, %v

What it means

The Docker driver's pull_activity_timeout option is parsed with time.ParseDuration during SetConfig. If the string cannot be parsed (e.g. missing unit or invalid characters), the driver returns this wrapped error and the plugin fails to configure.

Source

Thrown at drivers/docker/config.go:801

		}
		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
	}

	if d.config.InfraImagePullTimeout != "" {
		dur, err := time.ParseDuration(d.config.InfraImagePullTimeout)
		if err != nil {

View on GitHub (pinned to 482b49bf1a)

Solutions

  1. Use a valid duration string, e.g. "5m".
  2. Include a unit suffix; bare numbers are invalid.
  3. Ensure config templating actually substitutes placeholders.

Example fix

// before
pull_activity_timeout = "10min"
// after
pull_activity_timeout = "10m"
Defensive patterns

Strategy: validation

Validate before calling

if _, err := time.ParseDuration(cfg.PullActivityTimeout); cfg.PullActivityTimeout != "" && err != nil {
  return fmt.Errorf("pull_activity_timeout invalid: %v", err)
}

Try / catch

dur, err := time.ParseDuration(cfg.PullActivityTimeout)
if err != nil {
  return fmt.Errorf("failed to parse 'pull_activity_timeout' duration: %v", err)
}

Prevention

When it happens

Trigger: plugin "docker" config sets pull_activity_timeout = "600" or "never" — not parseable by time.ParseDuration.

Common situations: Unitless integers, descriptive text instead of a duration, or templating mistakes leaving a placeholder like ${TIMEOUT} in the 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.

Related errors


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