GoogleContainerTools/skaffold · error

failed to run transfomer: %s, err: %v

Error message

failed to run transfomer: %s, err: %v

What it means

Transform pipes rendered manifests through an external transformer container image (stdin/stdout). If the transformer command exits non-zero, this error wraps the image name and underlying error. The (typo 'transfomer') message identifies which transformer image failed.

Source

Thrown at pkg/skaffold/render/transform/transform.go:140

func (v *Transformer) Transform(ctx context.Context, ml manifest.ManifestList) (manifest.ManifestList, error) {
	if v.kptFn == nil {
		return ml, nil
	}
	var err error
	for _, transformer := range v.kptFn {
		slice := util.EnvMapToSlice(transformer.ConfigMap, "=")
		args := []string{"fn", "eval", "-i", transformer.Image, "-o", "unwrap", "-", "--"}
		args = append(args, slice...)
		cmd := exec.CommandContext(ctx, "kpt", args...)
		reader := ml.Reader()
		buffer := &bytes.Buffer{}
		cmd.Stdin = reader
		cmd.Stdout = buffer

		err := util.RunCmd(ctx, cmd)
		if err != nil {
			return ml, fmt.Errorf("failed to run transfomer: %s, err: %v", transformer.Image, err)
		}
		ml, err = manifest.Load(buffer)
		if err != nil {
			return ml, err
		}
	}
	return ml, err
}

// TransformPath transform manifests in-place in filepath.
func (v *Transformer) TransformPath(path string) error {
	for _, transformer := range v.kptFn {
		kvs := util.EnvMapToSlice(transformer.ConfigMap, "=")
		args := []string{"fn", "eval", "-i", transformer.Image, path, "--"}
		args = append(args, kvs...)
		command := exec.Command("kpt", args...)
		err := command.Run()
		if err != nil {

View on GitHub (pinned to a1189de023)

Solutions

  1. Read the underlying err in the message — it shows the command's exit failure reason
  2. Run the transformer image manually: `cat manifests.yaml | docker run -i --rm <image> <args>` to reproduce
  3. Fix the transformer image name/tag and args in skaffold.yaml
  4. Ensure the transformer reads stdin and writes valid manifest YAML to stdout
  5. Pre-pull the image / fix registry auth if the failure is image-pull related

Example fix

// before
transformer: ghcr.io/example/kustomize-set-image:v1.2.3  # tag does not exist
// after
transformer: ghcr.io/example/kustomize-set-image:v1.2.2
Defensive patterns

Strategy: try-catch

Validate before calling

out, err := exec.Command("docker", "run", "--rm", "-i", transformer.Image, transformer.Args...).Run()
// pre-test: echo 'kind: List' | docker run -i --rm <image> <args>

Try / catch

ml, err := Transform(ctx, out, transformer, ml)
if err != nil && strings.Contains(err.Error(), "failed to run transfomer") {
    return fmt.Errorf("transformer %s failed; verify image and args manually: %w", transformer.Image, err)
}

Prevention

When it happens

Trigger: Transform (called from Render) runs a transformer image via cmd; the image is missing, not pullable, or the transformer binary inside exits with an error on the given input manifests.

Common situations: Typos in transformer image name/tag; transformer container not executable or expects different CLI args; transformer fails on the manifest content (e.g. expects a specific schema); no network to pull the image.

Related errors


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