GoogleContainerTools/skaffold · error
found multiple status check timeouts in skaffold.yaml (not s
Error message
found multiple status check timeouts in skaffold.yaml (not supported in `skaffold apply`): %d, %d
What it means
getDefaultDeployer merges settings across multiple skaffold configs when assembling the default (apply-style) deployer. If two configs declare different `statusCheckDeadlineSeconds` values — and neither equals the default — merging is ambiguous, so this error is thrown since `skaffold apply` cannot reconcile conflicting timeouts.
Source
Thrown at pkg/skaffold/runner/deployer.go:258
var statusCheck *bool
for _, d := range deployCfgs {
if d.KubeContext != "" {
if kubeContext != "" && kubeContext != d.KubeContext {
return nil, errors.New("cannot resolve active Kubernetes context - multiple contexts configured in skaffold.yaml")
}
kubeContext = d.KubeContext
}
if d.StatusCheck != nil {
if statusCheck == nil {
statusCheck = d.StatusCheck
} else if statusCheck != d.StatusCheck {
// if we get conflicting values for status check from different skaffold configs, we turn status check off
statusCheck = util.Ptr(false)
}
}
if d.StatusCheckDeadlineSeconds != 0 && d.StatusCheckDeadlineSeconds != int(status.DefaultStatusCheckDeadline.Seconds()) {
if statusCheckTimeout != -1 && statusCheckTimeout != d.StatusCheckDeadlineSeconds {
return nil, fmt.Errorf("found multiple status check timeouts in skaffold.yaml (not supported in `skaffold apply`): %d, %d", statusCheckTimeout, d.StatusCheckDeadlineSeconds)
}
statusCheckTimeout = d.StatusCheckDeadlineSeconds
}
if d.Logs.Prefix != "" {
if logPrefix != "" && logPrefix != d.Logs.Prefix {
return nil, fmt.Errorf("found multiple log prefixes in skaffold.yaml (not supported in `skaffold apply`): %s, %s", logPrefix, d.Logs.Prefix)
}
logPrefix = d.Logs.Prefix
}
var currentDefaultNamespace *string
var currentKubectlFlags latest.KubectlFlags
if d.KubectlDeploy != nil {
currentDefaultNamespace = d.KubectlDeploy.DefaultNamespace
currentKubectlFlags = d.KubectlDeploy.Flags
}
if kFlags == nil {
kFlags = ¤tKubectlFlags
}View on GitHub (pinned to a1189de023)
Solutions
- Set the same `statusCheckDeadlineSeconds` value in every composed skaffold config
- Remove the field from all but one config so the others fall back to the shared default
- Standardize the timeout in a shared base config that dependencies reference
Example fix
// config-a (before) deploy: statusCheckDeadlineSeconds: 300 // config-b (before) deploy: statusCheckDeadlineSeconds: 60 // after: use 300 in BOTH configs, or omit it in all but one
Defensive patterns
Strategy: validation
Validate before calling
const deadlines = configs.map(c => c.deploy?.statusCheckDeadlineSeconds).filter(v => v !== undefined)
if (new Set(deadlines).size > 1) {
throw new Error('conflicting statusCheckDeadlineSeconds: ' + deadlines.join(', '))
} Prevention
- Standardize statusCheckDeadlineSeconds in a shared base config
- Run `skaffold diagnose` on composed configs before apply
- Keep per-service configs free of global deploy settings
When it happens
Trigger: Running `skaffold apply` with multiple skaffold configs (via `--filename`, config dependencies, or profiles) where `statusCheckDeadlineSeconds` differs between configs and differs from the built-in default.
Common situations: Team members adding different status-check timeouts to per-service configs that later get composed; config dependencies inherited from other repos with their own deadline settings.
Understand the failure class
- Timeouts: ETIMEDOUT, deadlines, and hung requests — what actually expires when a request times out.
Related errors
- found multiple log prefixes in skaffold.yaml (not supported
- found multiple namespaces in skaffold.yaml (not supported in
- kpt deployer mixed in with other deployers not supported yet
- creating deployer: %w
- strings.Join(errMsgs, "\n") (joined helm cleanup error messa
AI-assisted analysis of GoogleContainerTools/skaffold@a1189de023 (2026-09-05).
Data as JSON: /api/errors/2533b0538641b027.
Report an issue: GitHub.