Для отправки переменной мы можем использовать решение «ARG», «базовое» решение и «файловое» решение.
ARG version_default=v1
FROM alpine:latest as base1
ARG version_default
ENV version=$version_default
RUN echo ${version}
RUN echo ${version_default}
FROM alpine:latest as base2
ARG version_default
RUN echo ${version_default}
Другой способ - использовать базовый контейнер для нескольких этапов:
FROM alpine:latest as base
ARG version_default
ENV version=$version_default
FROM base
RUN echo ${version}
FROM base
RUN echo ${version}
Более подробную информацию вы можете найти здесь: https://github.com/moby/moby/issues/37345
Также вы можете сохранить хеш в файл на первом этапе, скопировать файл на втором этапе, а затем прочитать и использовать его.там.
Из того, что я понимаю, вы хотите скопировать собранную программу в новый докер для многоэтапной сборки, чтобы размер вывода был меньше.По сути, вам не нужно отправлять переменную, которую вы должны знать, если вы создали ее в первом изображении, и скопируйте ее оттуда
FROM golang:alpine as gobuilder
RUN apk update && apk add git
COPY sources/src/ $GOPATH/src/folder/
WORKDIR $GOPATH/src/folder/
#get dependencies
RUN go get -d -v
#build the binary
RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -a -installsuffix cgo -ldflags="-w -s" -o /go/bin/myGoProgram myGoSource.go
FROM alpine:latest
COPY --from=gobuilder /go/bin/myGoProgram /usr/local/bin/myGoProgram
ENTRYPOINT ["myGoProgram"] # or ENTRYPOINT ["/usr/local/bin/myGoProgram"]