Dockerfile: make cli stages more resilient against unclean termination
The Dockerfile in this repository performs many stages in parallel. If any of those stages fails to build (which could be due to networking congestion), other stages are also (forcibly?) terminated, which can cause an unclean shutdown. In some case, this can cause `git` to be terminated, leaving a `.lock` file behind in the cache mount. Retrying the build now will fail, and the only workaround is to clean the build-cache (which causes many stages to be built again, potentially triggering the problem again). > [dockercli-integration 3/3] RUN --mount=type=cache,id=dockercli-integration-git-linux/arm64/v8,target=./.git --mount=type=cache,target=/root/.cache/go-build,id=dockercli-integration-build-linux/arm64/v8 /download-or-build-cli.sh v17.06.2-ce https://github.com/docker/cli.git /build: #0 1.575 fatal: Unable to create '/go/src/github.com/docker/cli/.git/shallow.lock': File exists. #0 1.575 #0 1.575 Another git process seems to be running in this repository, e.g. #0 1.575 an editor opened by 'git commit'. Please make sure all processes #0 1.575 are terminated then try again. If it still fails, a git process #0 1.575 may have crashed in this repository earlier: #0 1.575 remove the file manually to continue. This patch: - Updates the Dockerfile to remove `.lock` files (`shallow.lock`, `index.lock`) that may have been left behind from previous builds. I put this code in the Dockerfile itself (not the script), as the script may be used in other situations outside of the Dockerfile (for which we cannot guarantee no other git session is active). - Adds a `docker --version` step to the stage; this is mostly to verify the build was successful (and to be consistent with other stages). Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
This commit is contained in:
parent
3fae7ea16f
commit
9f6dbbc7ea
1 changed files with 8 additions and 4 deletions
12
Dockerfile
12
Dockerfile
|
@ -255,9 +255,11 @@ COPY hack/dockerfile/cli.sh /download-or-build-cli.sh
|
|||
ARG DOCKERCLI_REPOSITORY
|
||||
ARG DOCKERCLI_VERSION
|
||||
ARG TARGETPLATFORM
|
||||
RUN --mount=type=cache,id=dockercli-git-$TARGETPLATFORM,target=./.git \
|
||||
RUN --mount=type=cache,id=dockercli-git-$TARGETPLATFORM,sharing=locked,target=./.git \
|
||||
--mount=type=cache,target=/root/.cache/go-build,id=dockercli-build-$TARGETPLATFORM \
|
||||
/download-or-build-cli.sh ${DOCKERCLI_VERSION} ${DOCKERCLI_REPOSITORY} /build
|
||||
rm -f ./.git/*.lock \
|
||||
&& /download-or-build-cli.sh ${DOCKERCLI_VERSION} ${DOCKERCLI_REPOSITORY} /build \
|
||||
&& /build/docker --version
|
||||
|
||||
FROM base AS dockercli-integration
|
||||
WORKDIR /go/src/github.com/docker/cli
|
||||
|
@ -265,9 +267,11 @@ COPY hack/dockerfile/cli.sh /download-or-build-cli.sh
|
|||
ARG DOCKERCLI_INTEGRATION_REPOSITORY
|
||||
ARG DOCKERCLI_INTEGRATION_VERSION
|
||||
ARG TARGETPLATFORM
|
||||
RUN --mount=type=cache,id=dockercli-integration-git-$TARGETPLATFORM,target=./.git \
|
||||
RUN --mount=type=cache,id=dockercli-integration-git-$TARGETPLATFORM,sharing=locked,target=./.git \
|
||||
--mount=type=cache,target=/root/.cache/go-build,id=dockercli-integration-build-$TARGETPLATFORM \
|
||||
/download-or-build-cli.sh ${DOCKERCLI_INTEGRATION_VERSION} ${DOCKERCLI_INTEGRATION_REPOSITORY} /build
|
||||
rm -f ./.git/*.lock \
|
||||
&& /download-or-build-cli.sh ${DOCKERCLI_INTEGRATION_VERSION} ${DOCKERCLI_INTEGRATION_REPOSITORY} /build \
|
||||
&& /build/docker --version
|
||||
|
||||
# runc
|
||||
FROM base AS runc-src
|
||||
|
|
Loading…
Reference in a new issue