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