From f057195a4fcf0fb6a01d60049d346c8808add1bc Mon Sep 17 00:00:00 2001 From: Tonis Tiigi Date: Wed, 18 Nov 2020 22:10:37 -0800 Subject: [PATCH] build: handle lowercase Dockerfile name as a fallback This was supported by the legacy builder: moby#10858 Signed-off-by: Tonis Tiigi --- build/build.go | 35 ++++++++++++++++++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) diff --git a/build/build.go b/build/build.go index 4a366ab53e7..515c33cf4c7 100644 --- a/build/build.go +++ b/build/build.go @@ -796,12 +796,14 @@ func LoadInputs(inp Inputs, target *client.SolveOpt) (func(), error) { if dockerfileName == "" { dockerfileName = "Dockerfile" } - target.FrontendAttrs["filename"] = dockerfileName if dockerfileDir != "" { target.LocalDirs["dockerfile"] = dockerfileDir + dockerfileName = handleLowercaseDockerfile(dockerfileDir, dockerfileName) } + target.FrontendAttrs["filename"] = dockerfileName + release := func() { for _, dir := range toRemove { os.RemoveAll(dir) @@ -889,3 +891,34 @@ func (w *waitingWriter) Close() error { } return err } + +// handle https://github.com/moby/moby/pull/10858 +func handleLowercaseDockerfile(dir, p string) string { + if filepath.Base(p) != "Dockerfile" { + return p + } + + f, err := os.Open(filepath.Dir(filepath.Join(dir, p))) + if err != nil { + return p + } + + names, err := f.Readdirnames(-1) + if err != nil { + return p + } + + foundLowerCase := false + for _, n := range names { + if n == "Dockerfile" { + return p + } + if n == "dockerfile" { + foundLowerCase = true + } + } + if foundLowerCase { + return filepath.Join(filepath.Dir(p), "dockerfile") + } + return p +}