我只看过使用COPY在多阶段Dockerfile的各阶段之间复制文件的例子,但有没有办法简单地复制一个ENV变量?我的用例是从一个git图像开始,只是为了获得将成为构建一部分的提交哈希。我后来构建的图像没有git。
我意识到我可以将git哈希管道输出到文件并使用COPY,但我只是想知道是否有更清洁的方法?
您有3个选项:“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
您也可以将哈希值保存到第一阶段的文件中,然后在第二阶段复制该文件,然后将其读取并在那里使用。