Browse Source

hack: enable Go modules when building dockerd and docker-proxy

This is a workaround to have buildinfo with deps embedded in the
binary. We need to create a go.mod file before building with
-modfile=vendor.mod, otherwise it fails with:
"-modfile cannot be used to set the module root directory."

Signed-off-by: CrazyMax <crazy-max@users.noreply.github.com>
(cherry picked from commit 7665feeb528d02021b943aed3655eff5eca96598)
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
Kevin Alvarez 2 years ago
parent
commit
314b84b023
2 changed files with 10 additions and 2 deletions
  1. 1 1
      Dockerfile
  2. 9 1
      hack/make/.binary

+ 1 - 1
Dockerfile

@@ -599,7 +599,7 @@ RUN <<EOT
     XX_CC_PREFER_LINKER=ld xx-clang --setup-target-triple
   fi
 EOT
-RUN --mount=type=bind,target=. \
+RUN --mount=type=bind,target=.,rw \
     --mount=type=tmpfs,target=cli/winresources/dockerd \
     --mount=type=tmpfs,target=cli/winresources/docker-proxy \
     --mount=type=cache,target=/root/.cache/go-build,id=moby-build-$TARGETPLATFORM <<EOT

+ 9 - 1
hack/make/.binary

@@ -74,11 +74,19 @@ source "${MAKEDIR}/.go-autogen"
 		fi
 	fi
 
+	# This is a workaround to have buildinfo with deps embedded in the binary. We
+	# need to create a go.mod file before building with -modfile=vendor.mod,
+	# otherwise it fails with: "-modfile cannot be used to set the module root directory."
+	if [ ! -f "go.mod" ]; then
+		printf '%s\n\n%s' 'module github.com/docker/docker' 'go 1.19' > "go.mod"
+		trap 'rm -f go.mod' EXIT
+	fi
+
 	echo "Building $([ "$DOCKER_STATIC" = "1" ] && echo "static" || echo "dynamic") $DEST/$BINARY_FULLNAME ($PLATFORM_NAME)..."
 	if [ -n "$DOCKER_DEBUG" ]; then
 		set -x
 	fi
-	go build -o "$DEST/$BINARY_FULLNAME" "${BUILDFLAGS[@]}" -ldflags "$LDFLAGS $LDFLAGS_STATIC $DOCKER_LDFLAGS" ${GO_PACKAGE}
+	GO111MODULE=on go build -mod=vendor -modfile=vendor.mod -o "$DEST/$BINARY_FULLNAME" "${BUILDFLAGS[@]}" -ldflags "$LDFLAGS $LDFLAGS_STATIC $DOCKER_LDFLAGS" ${GO_PACKAGE}
 )
 
 echo "Created binary: $DEST/$BINARY_FULLNAME"