Docker构建镜像后运行容器报错Cannot find module '/home/backend/dist/src/server.js'求助
问题原因与修复方案
核心问题定位
你遇到的报错本质是容器内的入口文件路径不匹配,同时存在依赖缺失的隐藏问题:
- 多阶段构建的第二个阶段未显式设置工作目录,使用相对路径复制dist目录时容易出现结构错位,导致最终找不到指定的server.js
- 仅复制了编译后的dist目录到最终镜像,没有同步复制项目运行需要的生产依赖node_modules,即使路径修正后也大概率会触发依赖缺失报错
修复后的Dockerfile参考
FROM node:14.17.1 as base WORKDIR /home/backend # 复制依赖文件 COPY package.json ./ COPY yarn.lock ./ # 仅安装生产依赖,减小镜像体积 RUN yarn install --production # 复制源码并编译 COPY src ./src COPY tsconfig.json ./tsconfig.json RUN yarn build # 生产镜像阶段 FROM gcr.io/distroless/nodejs:14 WORKDIR /home/backend # 复制依赖和编译产物 COPY --from=base /home/backend/node_modules ./node_modules COPY --from=base /home/backend/dist ./dist # 暴露端口 EXPOSE 5000 # 启动命令,distroless node镜像默认执行node命令,直接传入入口路径即可 CMD [ "dist/src/server.js" ]
可选验证操作
如果调整后依然报错,可以临时将第二阶段的基础镜像替换为node:14.17.1,把CMD修改为["ls", "-al", "/home/backend/dist/src"]后运行容器,就能直接查看对应路径下是否存在server.js,确认是tsconfig编译配置问题还是路径复制问题。
内容的提问来源于stack exchange,提问作者Lewis1501
相关产品推荐
相关产品推荐

