报 `failed to solve: stage build: not found`,Dockerfile 里明明写着 FROM node:20 AS build,最后一段 COPY 还是提示该阶段不存在,把名字改成全小写又能过,团队里没人说得清原因。日志里能对上时间点,这种反而好排。

阶段名区分大小写,COPY --from 跟的是 AS 定义的名字而不是镜像名,写成 AS Build 却引用 build,两边对不上就判该阶段不存在,大小写错一个字母整段构建就失败。这一点先确认清楚,后面就不用反复试。

FROM node:20-alpine AS builder
COPY --from=builder /app/dist /usr/share/nginx/html
docker build --target builder -t app:build .

「多阶段构建 stage 引用」确认了原因之后,改动尽量只碰那一处,顺手改的东西后面最容易出问题。偶发问题先统计频率,一小时几次和一天一次,查法完全不同。

改完顺手把文档补一句,省得下次自己重新推一遍。

处理上按这个顺序:阶段名统一用小写字母加短横线 别把驼峰和下划线混着写;确认 AS 定义挂在真正被引用的那个 FROM 上 不要写到临时阶段里;拿不准就直接用 --from=0 这种序号兜底 别硬猜阶段名 试一次就知道。

结果对不对很好判断,构建通过,单独用 --target 也能停在中途阶段,产物目录内容完整,无需全量重跑。

作者 9823189