Skip to content

Commit fcf5593

Browse files
authored
Merge pull request moby#5596 from tonistiigi/dockerfile-fixed-named-context-parent-stage
dockerfile: fix named context replacement for child stages
2 parents f118814 + 4c8bd43 commit fcf5593

File tree

2 files changed

+39
-0
lines changed

2 files changed

+39
-0
lines changed

frontend/dockerfile/dockerfile2llb/convert.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -376,6 +376,7 @@ func toDispatchState(ctx context.Context, dt []byte, opt ConvertOpt) (*dispatchS
376376
}
377377
}
378378
allDispatchStates.addState(ds)
379+
ds.base = nil // reset base set by addState
379380
continue
380381
}
381382
}

frontend/dockerfile/dockerfile_test.go

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7116,6 +7116,44 @@ COPY --from=base /env_foobar /
71167116
dt, err = os.ReadFile(filepath.Join(destDir, "env_path"))
71177117
require.NoError(t, err)
71187118
require.Contains(t, string(dt), "/foobar:")
7119+
7120+
// this case checks replacing stage that is based on another stage.
7121+
// moby/buildkit#5578-2539397486
7122+
7123+
dockerfile = []byte(`
7124+
FROM busybox AS parent
7125+
FROM parent AS base
7126+
RUN echo base > /out
7127+
FROM base
7128+
RUN [ -f /etc/alpine-release ]
7129+
RUN [ ! -f /out ]
7130+
`)
7131+
7132+
dir = integration.Tmpdir(
7133+
t,
7134+
fstest.CreateFile("Dockerfile", dockerfile, 0600),
7135+
)
7136+
7137+
f = getFrontend(t, sb)
7138+
7139+
destDir = t.TempDir()
7140+
7141+
_, err = f.Solve(sb.Context(), c, client.SolveOpt{
7142+
FrontendAttrs: map[string]string{
7143+
"context:base": "docker-image://" + target,
7144+
},
7145+
LocalMounts: map[string]fsutil.FS{
7146+
dockerui.DefaultLocalNameDockerfile: dir,
7147+
dockerui.DefaultLocalNameContext: dir,
7148+
},
7149+
Exports: []client.ExportEntry{
7150+
{
7151+
Type: client.ExporterLocal,
7152+
OutputDir: destDir,
7153+
},
7154+
},
7155+
}, nil)
7156+
require.NoError(t, err)
71197157
}
71207158

71217159
func testNamedImageContextPlatform(t *testing.T, sb integration.Sandbox) {

0 commit comments

Comments
 (0)