Docker 17.05.0-ce 开始,提供了多阶段构建方案。方便我们通过这种方式,将前一阶段的结果 COPY 到后面的阶段使用。

但是,在学习使用它的过程中,我遇到的问题,着实让人摸不清头脑: 在第二阶段使用 COPY 命令后的目标文件夹中, 老是出现曾经 build 出的同样的结果。

虽然没有弄清楚原因,还好找到了避免这个问题的方法:将第一阶段的结果文件夹,拷贝到第二阶段编译的容器的其他目录,然后使用mv命令移动到目标文件夹中。

最初的Dockerfile是这样的:

FROM zengyiheng/hugo as builder

COPY . /data
WORKDIR /data
RUN hugo


FROM nginx
COPY --from=builder /data/public/* /usr/share/nginx/html/

但是,每次build的结果,都是一样一样的。

开始怀疑是cache导致的,在 docker build 命令中加入 –no-cache 参数,也没有效果。

最后,将 Dockerfile 内容修改为:

FROM zengyiheng/hugo as builder

COPY ./ /data
WORKDIR /data
RUN hugo


FROM nginx
COPY --from=builder /data/public/* /usr/share/nginx/html/
COPY --from=builder /data /data

构建结果就正确了。