Skip to content
This repository was archived by the owner on Jun 3, 2025. It is now read-only.

Commit 239d16c

Browse files
authored
feat: disable cache-copy-layers in multistage builds; closes 2065 (#2227)
1 parent 06866c0 commit 239d16c

2 files changed

Lines changed: 37 additions & 0 deletions

File tree

pkg/dockerfile/dockerfile.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,10 @@ func ParseStages(opts *config.KanikoOptions) ([]instructions.Stage, []instructio
5858
return nil, nil, errors.Wrap(err, "parsing dockerfile")
5959
}
6060

61+
if opts.CacheCopyLayers && len(stages) >= 2 {
62+
return nil, nil, errors.New("kaniko does not support caching copy layers in multistage builds")
63+
}
64+
6165
metaArgs, err = expandNested(metaArgs, opts.BuildArgs)
6266
if err != nil {
6367
return nil, nil, errors.Wrap(err, "expanding meta ARGs")

pkg/dockerfile/dockerfile_test.go

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,39 @@ import (
2929
"github.com/moby/buildkit/frontend/dockerfile/instructions"
3030
)
3131

32+
func Test_ParseStages_NoMultistageWithCacheCopy(t *testing.T) {
33+
dockerfile := `
34+
FROM scratch as first
35+
COPY testfile /
36+
37+
FROM scratch as second
38+
COPY --from=second testfile /
39+
`
40+
tmpfile, err := ioutil.TempFile("", "Dockerfile.test")
41+
if err != nil {
42+
t.Fatal(err)
43+
}
44+
45+
defer os.Remove(tmpfile.Name())
46+
47+
if _, err := tmpfile.Write([]byte(dockerfile)); err != nil {
48+
t.Fatal(err)
49+
}
50+
if err := tmpfile.Close(); err != nil {
51+
t.Fatal(err)
52+
}
53+
54+
opts := &config.KanikoOptions{
55+
DockerfilePath: tmpfile.Name(),
56+
CacheCopyLayers: true,
57+
}
58+
59+
_, _, err = ParseStages(opts)
60+
if err == nil {
61+
t.Fatal("expected ParseStages to fail on MultiStage build if CacheCopyLayers=true")
62+
}
63+
}
64+
3265
func Test_ParseStages_ArgValueWithQuotes(t *testing.T) {
3366
dockerfile := `
3467
ARG IMAGE="ubuntu:16.04"

0 commit comments

Comments
 (0)