hashicorp/nomad · error

failed to parse 'pull_activity_timeout' duration: %v

Error message

failed to parse 'pull_activity_timeout' duration: %v

What it means

pull_activity_timeout is floor-checked against pullActivityTimeoutMinimum after parsing. Values below this minimum are rejected because too-short timeouts would abort image pulls from slow registries or for large images.

Source

Thrown at drivers/docker/config.go:809

		}
		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 {
			return fmt.Errorf("failed to parse 'infra_image_pull_timeout' duration: %v", err)
		}
		d.config.infraImagePullTimeoutDuration = dur
	}

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

View on GitHub (pinned to 482b49bf1a)

Solutions

  1. Increase pull_activity_timeout to at least the minimum (5m).
  2. Remove the option to use the default.
  3. If pulls time out, raise the value — it measures pull inactivity, not total pull time.

Example fix

// before
pull_activity_timeout = "1m"
// after
pull_activity_timeout = "5m"
Defensive patterns

Strategy: validation

Validate before calling

d, err := time.ParseDuration(cfg.PullActivityTimeout)
if err == nil && d < 5*time.Minute {
  return fmt.Errorf("pull_activity_timeout must be >= 5m")
}

Try / catch

if dur < pullActivityTimeoutMinimum {
  return fmt.Errorf("pull_activity_timeout is less than minimum, %v", pullActivityTimeoutMinimum)
}

Prevention

When it happens

Trigger: Setting pull_activity_timeout = "1s" (or anything under the minimum, 5m) in the docker plugin client config.

Common situations: Users who want pulls to fail fast set tiny values; misreading the option as a poll interval rather than an inactivity timeout.

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/1dca35d3dcc9d973. Report an issue: GitHub.