多阶段Dockerfile中,基于build阶段的start阶段需重复COPY文件吗?
多阶段Dockerfile中start阶段的文件复用问题
你的理解完全正确——start阶段不需要重复执行COPY --from=build操作。
核心原理
多阶段构建里,当你写FROM build as start时,start阶段会直接复用build阶段最终的完整文件系统:包括build阶段中COPY进去的所有文件、RUN命令生成的产物,甚至WORKDIR的设置都会继承。
也就是说,build阶段里已经完成的文件复制、构建操作,所有结果都会直接传递给start阶段,你不需要再手动复制一遍。
修正后的示例Dockerfile
把多余的COPY命令删掉即可:
FROM <whatever> as build WORKDIR /app COPY ./a.file ./ COPY ./b.file ./ RUN <build command> FROM build as start WORKDIR /app # 无需重复复制,直接使用build阶段的文件系统 CMD <start command>
额外说明
你可能会看到有些多阶段构建里用COPY --from=build,那通常是因为start阶段没有直接基于build阶段,而是选择了一个更轻量化的基础镜像(比如alpine),这时候才需要从build阶段复制必要的运行文件,以此来缩小最终镜像的体积。但如果你的start阶段直接基于build阶段,就完全没必要多此一举。
内容的提问来源于stack exchange,提问作者Parzh
相关产品推荐
相关产品推荐

