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

  1. Use a valid Go duration string such as "5m", "1h", "168h".
  2. Remove days/weeks wording — Go durations only support ns/us/ms/s/m/h.
  3. 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

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.

Related errors


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