我只看到了使用 COPY 在多阶段 Dockerfile 的阶段之间复制文件的示例,但是有没有办法简单地复制 ENV 变量?我的用例是从一个 git 图像开始,以获取将成为构建一部分的提交哈希。我稍后构建的图像没有 git。
我意识到我可以将 git 哈希输出到文件并使用 COPY 但我只是想知道是否有更清洁的方法?
我只看到了使用 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
您也可以在第一阶段将哈希保存到文件中,然后在第二阶段复制文件,然后读取并在那里使用它。
在 Dockerfile 中的阶段之间共享变量:
echo $runDeps > $DESTDIR/runtime.deps
RUN apk add --no-cache --virtual .run-deps `cat /runtime.deps` gnutls-utils iptables libnl3 readline gettext libintl