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
- Read the underlying err in the message — it shows the command's exit failure reason
- Run the transformer image manually: `cat manifests.yaml | docker run -i --rm <image> <args>` to reproduce
- Fix the transformer image name/tag and args in skaffold.yaml
- Ensure the transformer reads stdin and writes valid manifest YAML to stdout
- 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
- Pin transformer image digests/tags and verify the tag exists in the registry
- Test the transformer standalone with sample manifests before adding to skaffold.yaml
- Ensure the transformer reads stdin and writes valid YAML to stdout and exits 0
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
- Failed to render release
- rendering manifests: %w
- rendering manifests: %w
- loading artifacts: %w
- executing build: %w
AI-assisted analysis of GoogleContainerTools/skaffold@a1189de023 (2026-09-05).
Data as JSON: /api/errors/9678eb61d3f01aa1.
Report an issue: GitHub.