Skip to content

Commit c46a5a5

Browse files
authored
Merge pull request moby#3130 from jedevc/named-image-context-scratch
dockerfile: allow named context for docker-image://scratch
2 parents 47e953b + b277b9c commit c46a5a5

File tree

2 files changed

+57
-0
lines changed

2 files changed

+57
-0
lines changed

frontend/dockerfile/builder/build.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -848,6 +848,11 @@ func contextByName(ctx context.Context, c client.Client, sessionID, name string,
848848
switch vv[0] {
849849
case "docker-image":
850850
ref := strings.TrimPrefix(vv[1], "//")
851+
if ref == "scratch" {
852+
st := llb.Scratch()
853+
return &st, nil, nil, nil
854+
}
855+
851856
imgOpt := []llb.ImageOption{
852857
llb.WithCustomName("[context " + name + "] " + ref),
853858
}

frontend/dockerfile/dockerfile_test.go

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,7 @@ var allTests = integration.TestFuncs(
117117
testNamedImageContext,
118118
testNamedImageContextPlatform,
119119
testNamedImageContextTimestamps,
120+
testNamedImageContextScratch,
120121
testNamedLocalContext,
121122
testNamedOCILayoutContext,
122123
testNamedOCILayoutContextExport,
@@ -5350,6 +5351,57 @@ RUN echo foo >> /test
53505351
require.Less(t, diff, 10*time.Minute)
53515352
}
53525353

5354+
func testNamedImageContextScratch(t *testing.T, sb integration.Sandbox) {
5355+
ctx := sb.Context()
5356+
5357+
c, err := client.New(ctx, sb.Address())
5358+
require.NoError(t, err)
5359+
defer c.Close()
5360+
5361+
dockerfile := []byte(`
5362+
FROM busybox
5363+
COPY <<EOF /out
5364+
hello world!
5365+
EOF
5366+
`)
5367+
5368+
dir, err := integration.Tmpdir(
5369+
t,
5370+
fstest.CreateFile("Dockerfile", dockerfile, 0600),
5371+
)
5372+
require.NoError(t, err)
5373+
5374+
f := getFrontend(t, sb)
5375+
5376+
destDir := t.TempDir()
5377+
5378+
_, err = f.Solve(sb.Context(), c, client.SolveOpt{
5379+
FrontendAttrs: map[string]string{
5380+
"context:busybox": "docker-image://scratch",
5381+
},
5382+
LocalDirs: map[string]string{
5383+
builder.DefaultLocalNameDockerfile: dir,
5384+
builder.DefaultLocalNameContext: dir,
5385+
},
5386+
Exports: []client.ExportEntry{
5387+
{
5388+
Type: client.ExporterLocal,
5389+
OutputDir: destDir,
5390+
},
5391+
},
5392+
}, nil)
5393+
require.NoError(t, err)
5394+
5395+
items, err := os.ReadDir(destDir)
5396+
require.NoError(t, err)
5397+
require.Equal(t, 1, len(items))
5398+
require.Equal(t, "out", items[0].Name())
5399+
5400+
dt, err := os.ReadFile(filepath.Join(destDir, "out"))
5401+
require.NoError(t, err)
5402+
require.Equal(t, "hello world!\n", string(dt))
5403+
}
5404+
53535405
func testNamedLocalContext(t *testing.T, sb integration.Sandbox) {
53545406
ctx := sb.Context()
53555407

0 commit comments

Comments
 (0)