GoogleContainerTools/skaffold · error

docker build: %w

Error message

docker build: %w

What it means

The actual POST to the Docker daemon's build endpoint returned an error before any stream output was produced — for example the daemon rejected the request, the network mode is invalid, or the daemon is unreachable. Build wraps it as `docker build: ...`.

Source

Thrown at pkg/skaffold/docker/image.go:381

	progressOutput := progress.NewProgressOutput(out)
	body := progress.NewProgressReader(buildCtx, progressOutput, 0, "", "Sending build context to Docker daemon")

	resp, err := l.apiClient.ImageBuild(ctx, body, client.ImageBuildOptions{
		Tags:        []string{opts.Tag},
		Dockerfile:  a.DockerfilePath,
		BuildArgs:   buildArgs,
		CacheFrom:   a.CacheFrom,
		AuthConfigs: authConfigs,
		Target:      a.Target,
		ForceRemove: l.forceRemove,
		NetworkMode: strings.ToLower(a.NetworkMode),
		ExtraHosts:  a.AddHost,
		NoCache:     a.NoCache,
		PullParent:  a.PullParent,
	})
	if err != nil {
		return "", fmt.Errorf("docker build: %w", err)
	}
	defer resp.Body.Close()

	var imageID string
	auxCallback := func(msg jsonstream.Message) {
		if msg.Aux == nil {
			return
		}

		var result BuildResult
		if err := json.Unmarshal(*msg.Aux, &result); err != nil {
			log.Entry(ctx).Debug("Unable to parse build output:", err)
			return
		}
		imageID = result.ID
	}

	if err := streamDockerMessages(out, resp.Body, auxCallback); err != nil {

View on GitHub (pinned to a1189de023)

Solutions

  1. Verify the Docker daemon is running (`docker info`) and DOCKER_HOST is correct
  2. Check networkMode/addHost values in skaffold.yaml for validity
  3. Confirm the Docker daemon version supports the requested build options
  4. Read the wrapped error for the exact daemon message

Example fix

// before
networkMode: "custom-net"   # network doesn't exist
// after
networkMode: "bridge"       # or `docker network create custom-net`
Defensive patterns

Strategy: try-catch

Validate before calling

if err := exec.Command("docker", "info").Run(); err != nil {
	return fmt.Errorf("docker daemon unreachable: %w", err)
}

Try / catch

imageID, err := daemon.Build(...)
if err != nil && strings.Contains(err.Error(), "docker build:") {
	// check daemon health and options validity before retrying
	return fmt.Errorf("daemon rejected build: %w", err)
}

Prevention

When it happens

Trigger: ImageBuild (the daemon HTTP call configured with NetworkMode, ExtraHosts, NoCache, PullParent) returns an error: daemon unavailable, invalid NetworkMode/AddHost values, unsupported build options for the daemon version, or HTTP transport failure.

Common situations: Docker daemon not running (docker desktop stopped); `networkMode` in skaffold.yaml names a non-existent network; `addHost` entries malformed; daemon version too old for requested options; DOCKER_HOST points to a dead remote.

Related errors


AI-assisted analysis of GoogleContainerTools/skaffold@a1189de023 (2026-09-05). Data as JSON: /api/errors/44a2e27a4c83ea53. Report an issue: GitHub.