GoogleContainerTools/skaffold · warning
STATUSCHECK_CONTAINER_CREATING
STATUSCHECK_CONTAINER_CREATING
Error message
creating container %s
What it means
Raised when a container is in Waiting state with reason ContainerCreating (code STATUSCHECK_CONTAINER_CREATING): the image is pulled/being pulled but the container has not started. Skaffold reports it as a transient creation step, naming the container.
Source
Thrown at pkg/diag/validator/validator.go:365
case p.isStable():
return ""
default:
if p.ae.Message != "" {
return p.ae.Message
}
}
return fmt.Sprintf(actionableMessage, p.namespace, p.name)
}
func extractErrorMessageFromWaitingContainerStatus(po *v1.Pod, c v1.ContainerStatus) (proto.StatusCode, []string, error) {
// Extract meaning full error out of container statuses.
switch c.State.Waiting.Reason {
case podInitializing:
// container is waiting to run. This could be because one of the init containers is
// still not completed
return proto.StatusCode_STATUSCHECK_POD_INITIALIZING, nil, nil
case containerCreating:
return proto.StatusCode_STATUSCHECK_CONTAINER_CREATING, nil, fmt.Errorf("creating container %s", c.Name)
case crashLoopBackOff:
// TODO, in case of container restarting, return the original failure reason due to which container failed.
sc, l := getPodLogs(po, c.Name, proto.StatusCode_STATUSCHECK_CONTAINER_RESTARTING)
return sc, l, fmt.Errorf("container %s is backing off waiting to restart", c.Name)
case ImagePullErr, ImagePullBackOff, ErrImagePullBackOff:
return proto.StatusCode_STATUSCHECK_IMAGE_PULL_ERR, nil, fmt.Errorf("container %s is waiting to start: %s can't be pulled", c.Name, c.Image)
case runContainerError:
match := runContainerRe.FindStringSubmatch(c.State.Waiting.Message)
if len(match) != 0 {
return proto.StatusCode_STATUSCHECK_RUN_CONTAINER_ERR, nil, fmt.Errorf("container %s in error: %s", c.Name, trimSpace(match[3]))
}
}
log.Entry(context.TODO()).Debugf("Unknown waiting reason for container %q: %v", c.Name, c.State)
return proto.StatusCode_STATUSCHECK_CONTAINER_WAITING_UNKNOWN, nil, fmt.Errorf("container %s in error: %v", c.Name, c.State.Waiting)
}
func newPodStatus(n string, ns string, p string) *podStatus {
return &podStatus{View on GitHub (pinned to a1189de023)
Solutions
- Wait briefly and re-run — this state is normally transient; use kubectl describe pod to watch Events.
- If it hangs for minutes, check kubelet logs and Events for volume-mount or CNI errors and fix the offending plugin/driver.
- Pre-pull or reduce image size / use a faster registry or mirror to speed creation.
- Verify the node's disk and network aren't saturated by other workloads.
Defensive patterns
Strategy: retry
Validate before calling
if cs.State.Waiting != nil && cs.State.Waiting.Reason == "ContainerCreating" { events, _ := client.CoreV1().Events(ns).List(ctx, eventFor(pod)); checkEventsForVolumeOrCNIErrors(events.Items) } Type guard
func isContainerCreating(cs v1.ContainerStatus) bool { return cs.State.Waiting != nil && cs.State.Waiting.Reason == "ContainerCreating" } Try / catch
sc, _, err := getContainerStatus(pod, cs); if sc == proto.StatusCode_STATUSCHECK_CONTAINER_CREATING { if !wait.PollImmediate(2*time.Second, 90*time.Second, func() (bool, error) { return podReady(pod), nil }); return fmt.Errorf("container still creating after 90s: %w", err) } Prevention
- Slim images and warm registry mirrors for CI speed
- Verify CSI/NFS volume drivers are installed and healthy
- Watch pod Events during deploys to catch hang causes early
- Avoid thundering-herd pod starts (stagger large Rollouts)
When it happens
Trigger: extractErrorMessageFromWaitingContainerStatus switches on c.State.Waiting.Reason == containerCreating and returns the error; reached from getContainerStatus via getPodStatus.
Common situations: Slow image pulls in CI; kubelet busy setting up volumes/mounts (slow CSI driver, NFS); heavy CNI/network-plugin setup; many pods starting simultaneously; dangling sandbox (pause container) creation delays.
Related errors
- pod has failed
- STATUSCHECK_POD_INITIALIZING
- waiting for init container %s to complete
- STATUSCHECK_UNKNOWN
- STATUSCHECK_CONTAINER_TERMINATED
AI-assisted analysis of GoogleContainerTools/skaffold@a1189de023 (2026-09-05).
Data as JSON: /api/errors/46bb1e34f7e8c8bf.
Report an issue: GitHub.