19

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

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

4

2 回答 2

21

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

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

于 2019-02-20T21:31:24.870 回答
0

在 Dockerfile 中的阶段之间共享变量:

  1. 在第一阶段将变量/ENV 保存到文件中: echo $runDeps > $DESTDIR/runtime.deps
  2. 将文件从第一阶段复制到第二阶段: $DESTDIR/runtime.deps
  3. 在第二阶段从文件中恢复值: RUN apk add --no-cache --virtual .run-deps `cat /runtime.deps` gnutls-utils iptables libnl3 readline gettext libintl
于 2021-06-25T07:50:41.100 回答