diff --git a/.dockerignore b/.dockerignore
index 07eab07660259388c7f05ed399ee2efbde4f0427..751ff2a0c25b757a204b30be80cd62d80828b02a 100644
--- a/.dockerignore
+++ b/.dockerignore
@@ -1,4 +1,7 @@
 **/.git
+/.git
+!/.git/HEAD
+!/.git/refs/heads
 **/*_test.go
 
 build/_workspace
diff --git a/internal/build/env.go b/internal/build/env.go
index c47681ebedc8bd8b5fcd1840e27046dc0adab410..793242fcf028436c14e0d1c486e2d93d1118f190 100644
--- a/internal/build/env.go
+++ b/internal/build/env.go
@@ -82,18 +82,21 @@ func Env() Environment {
 // LocalEnv returns build environment metadata gathered from git.
 func LocalEnv() Environment {
 	env := applyEnvFlags(Environment{Name: "local", Repo: "ethereum/go-ethereum"})
-	if _, err := os.Stat(".git"); err != nil {
+	head := ReadGitFile("HEAD")
+	if splits := strings.Split(head, " "); len(splits) == 2 {
+		head = splits[1]
+	} else {
 		return env
 	}
 	if env.Commit == "" {
-		env.Commit = RunGit("rev-parse", "HEAD")
+		env.Commit = ReadGitFile(head)
 	}
 	if env.Branch == "" {
-		if b := RunGit("rev-parse", "--abbrev-ref", "HEAD"); b != "HEAD" {
-			env.Branch = b
+		if head != "HEAD" {
+			env.Branch = strings.TrimLeft(head, "refs/heads/")
 		}
 	}
-	if env.Tag == "" {
+	if info, err := os.Stat(".git/objects"); err == nil && info.IsDir() && env.Tag == "" {
 		env.Tag = firstLine(RunGit("tag", "-l", "--points-at", "HEAD"))
 	}
 	return env
diff --git a/internal/build/util.go b/internal/build/util.go
index ade9cbe930a388d206a51bb9e30ba793bfa60edd..91465c41991c8792123a08d2c8d4db42c38cb895 100644
--- a/internal/build/util.go
+++ b/internal/build/util.go
@@ -25,6 +25,7 @@ import (
 	"log"
 	"os"
 	"os/exec"
+	"path"
 	"path/filepath"
 	"runtime"
 	"strings"
@@ -88,6 +89,15 @@ func RunGit(args ...string) string {
 	return strings.TrimSpace(stdout.String())
 }
 
+// ReadGitFile returns content of file in .git directory.
+func ReadGitFile(file string) string {
+	content, err := ioutil.ReadFile(path.Join(".git", file))
+	if err != nil {
+		return ""
+	}
+	return strings.TrimSpace(string(content))
+}
+
 // Render renders the given template file into outputFile.
 func Render(templateFile, outputFile string, outputPerm os.FileMode, x interface{}) {
 	tpl := template.Must(template.ParseFiles(templateFile))