如何在多阶段Docker构建阶段之间复制变量?

问题描述 投票:4回答:1

我只看过使用COPY在多阶段Dockerfile的各阶段之间复制文件的例子,但有没有办法简单地复制一个ENV变量?我的用例是从一个git图像开始,只是为了获得将成为构建一部分的提交哈希。我后来构建的图像没有git。

我意识到我可以将git哈希管道输出到文件并使用COPY,但我只是想知道是否有更清洁的方法?

dockerfile docker-build docker-multi-stage-build
1个回答
2
投票

您有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

您也可以将哈希值保存到第一阶段的文件中,然后在第二阶段复制该文件,然后将其读取并在那里使用。

© www.soinside.com 2019 - 2024. All rights reserved.