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

Docker容器中Node无法找到index.js的问题求助

问题分析与解决

你的问题出在第二阶段的文件复制逻辑和启动命令路径不匹配:

  • 第二阶段执行COPY --from=build /app/build /app时,是将构建阶段/app/build目录下的所有内容直接复制到当前阶段的/app目录中,并不会在/app下创建build子目录。
  • 但你的启动命令CMD ["node", "/app/build/index.js"]仍在寻找/app/build/index.js,实际上该文件的真实路径是/app/index.js。

修正方案(二选一)

方案1:保持启动命令路径,调整复制逻辑

将构建阶段的build目录整体复制到当前阶段的/app下,维持路径一致性:

FROM node:alpine AS build
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build
# second step:
FROM node:alpine
WORKDIR /app
# 把build目录整体复制到/app下,生成/app/build路径
COPY --from=build /app/build ./build
COPY --from=build /app/package*.json ./
RUN npm install --only=production
EXPOSE 3001
CMD ["node", "/app/build/index.js"]

方案2:保持复制逻辑,调整启动命令

既然构建产物已经直接放到/app下,就直接指向根目录的index.js:

FROM node:alpine AS build
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build
# second step:
FROM node:alpine
WORKDIR /app
COPY --from=build /app/build /app
COPY --from=build /app/package*.json ./
RUN npm install --only=production
EXPOSE 3001
# 直接启动/app下的index.js
CMD ["node", "/app/index.js"]

额外优化建议

  • 安装生产依赖后,可以清理npm缓存进一步缩小镜像体积:RUN npm install --only=production && npm cache clean --force
  • 复制文件时使用相对路径(如./build),比绝对路径更符合Dockerfile的书写习惯。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 10:38:15