Docker容器运行Express应用报错MODULE_NOT_FOUND找不到app.js模块求解
问题原因
报错是容器内/nodejs路径下不存在app.js文件,根源是你的Dockerfile存在两处错误:
- COPY指令的源路径写为绝对路径
/src,会从宿主机根目录寻找src目录,而非当前构建目录下的src目录,最终没有把业务代码复制到容器内 - 操作顺序不合理,先复制业务代码再安装依赖会破坏镜像缓存,每次修改代码都需要重新下载npm依赖
修复方案
1. 替换Dockerfile内容为以下:
FROM node:14.17.0-alpine # 指定工作目录 WORKDIR /nodejs # 优先复制依赖配置文件,利用镜像缓存加速构建 COPY package*.json ./ RUN npm install # 复制当前构建目录下src文件夹内的所有代码到工作目录 COPY ./src ./ CMD [ "node", "app.js" ]
2. 确认本地项目目录结构如下:
项目根目录(你执行docker命令的目录) ├── Dockerfile ├── package.json ├── package-lock.json └── src └── app.js
3. 重新构建镜像并启动
在项目根目录执行构建命令,注意末尾的.不能省略,代表以当前目录作为构建上下文:
docker build -t docker-express-app .
构建完成后执行原启动命令即可:
docker run --name express-api -d -p 4000:4000 docker-express-app
内容的提问来源于stack exchange,提问作者Xroid
相关产品推荐
相关产品推荐

