slimtoolkit/slim · error
failed to finish tar: %w
Error message
failed to finish tar: %w
What it means
After the walk completes, tw.Close() flushes the tar footer; failure here is wrapped as "failed to finish tar". With an in-memory writer over a bytes.Buffer this is rare and usually signals an internal inconsistency (e.g. Close called after a prior write error left the writer in a bad state).
Source
Thrown at pkg/imagebuilder/internalbuilder/engine.go:327
}
if !info.IsDir() {
f, err := os.Open(fp)
if err != nil {
return err
}
if _, err := io.Copy(tw, f); err != nil {
return fmt.Errorf("failed to read file into the tar: %w", err)
}
f.Close()
}
return nil
})
if err != nil {
return nil, fmt.Errorf("failed to scan files: %w", err)
}
if err := tw.Close(); err != nil {
return nil, fmt.Errorf("failed to finish tar: %w", err)
}
return tarball.LayerFromReader(&b)
}
View on GitHub (pinned to 81940d17fa)
Solutions
- Check the wrapped error (%w) — fix the underlying earlier failure first.
- Ensure the machine has sufficient memory for the in-memory layer archive (the whole layer is buffered in RAM).
- Re-run the build; if persistent, report with the unwrapped cause.
Example fix
// before
// layer of many GB tar-ed fully in memory -> buffer pressure
layerFromDir(LayerDataInfo{Source: "/huge/rootfs"})
// after
// use a disk-backed tar instead of bytes.Buffer for large layers
tw := tar.NewWriter(diskFile) // or stream via tarball.LayerFromOpener Defensive patterns
Strategy: fallback
Validate before calling
info, _ := os.Stat(src)
// estimate layer size; prefer disk-backed archiving above ~1GB
if info != nil && dirSize(src) > 1<<30 { useDiskBackedTar = true } Try / catch
if err != nil && strings.Contains(err.Error(), "failed to finish tar") {
// retry once; if it persists, check memory and underlying write errors
} Prevention
- Avoid buffering very large layers fully in memory
- Treat this as a symptom of an earlier tar write failure and fix that first
- Monitor build host memory during image builds
When it happens
Trigger: tar.Writer.Close fails while finalizing the archive in layerFromDir — practically only when a previous write to the writer failed or the buffer write errored.
Common situations: Rarely hit directly; usually a downstream symptom of an earlier tar write problem, or OOM/allocations failing while the buffer grows.
Related errors
- failed to calculate relative path: %w
- not implemented archiving file type %s (%s)
- failed to write tar header: %w
- failed to read file into the tar: %w
- failed to scan files: %w
AI-assisted analysis of slimtoolkit/slim@81940d17fa (2026-08-31).
Data as JSON: /api/errors/e0597c9f21279cd7.
Report an issue: GitHub.