You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

构建Angular Docker容器时出现COPY失败:文件不存在错误

Docker构建错误排查:COPY failed: stat app/dist/out: file does not exist

问题详情

我的Dockerfile配置如下:

FROM node:13-alpine as build-nodejs

WORKDIR /app
COPY package*.json /app/
RUN npm install

COPY ./ /app/
ARG build_command=build_prod
RUN npm run ${build_command} -- --output-path=./dist/out

# Final nginx container
FROM nginx:1.13

RUN apt-get update && apt-get -y upgrade && apt-get -y install nginx-extras libnginx-mod-nchan

RUN rm -f etc/nginx/sites-enabled/default \
    && rm -f /etc/nginx/conf.d/default.conf \
    && rm -f /usr/share/nginx/html/index.html

WORKDIR /usr/share/nginx/html

COPY --from=build-nodejs /app/dist/out /usr/share/nginx/html
COPY default.conf /etc/nginx/sites-enabled/default

EXPOSE 80
CMD ["nginx", "-g", "daemon off;"] 

构建时遇到错误:

Step 12/15 : COPY --from=build-nodejs /app/dist/out /usr/share/nginx/html
COPY failed: stat app/dist/out: file does not exist

排查步骤

  • 验证npm构建命令的输出路径
    检查package.json中build_prod脚本的定义,确认它是否本身已指定输出目录。部分框架(如Angular)的构建命令会读取配置文件中的输出路径,额外传递--output-path参数可能导致路径冲突,实际生成的目录可能不是/app/dist/out。
    可以临时修改Dockerfile,在RUN npm run ${build_command}...后添加RUN ls -la /app/dist,查看build阶段实际生成的目录结构。

  • 本地执行构建命令验证
    在项目根目录直接执行npm run build_prod -- --output-path=./dist/out,确认本地是否能正常生成dist/out目录及文件。如果本地构建也失败,问题根源在npm脚本本身,而非Docker配置。

  • 检查多阶段构建的阶段名称
    确认COPY --from=build-nodejs中的阶段名与前面FROM node:13-alpine as build-nodejs的定义完全一致(注意大小写、拼写),避免因名称不匹配导致无法找到对应阶段的文件。

  • 排查Alpine镜像兼容性
    node:13-alpine使用musl libc,部分npm包可能存在兼容性问题,导致构建过程静默失败、未生成输出目录。可以临时替换为node:13(非Alpine)镜像重新构建,验证是否能生成目标文件。

  • 检查Docker构建上下文
    确认执行docker build的目录为项目根目录,同时检查.dockerignore文件是否意外忽略了构建所需的源码文件(若源码被忽略,build阶段无法完成编译,自然不会生成输出目录)。

内容的提问来源于stack exchange,提问作者Myrzabek

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 08:25:10