Node.js应用Docker构建如何排除node_modules目录?.dockerignore不生效怎么办
Node.js Docker构建排除本地node_modules目录解决方案
要实现构建镜像时排除本地的node_modules目录,只需在Docker构建上下文的根目录创建.dockerignore文件并配置对应规则即可,若配置后不生效可按以下步骤排查修正:
1. 确认.dockerignore文件位置
.dockerignore必须和Dockerfile放在同一层级目录,也就是你执行docker build命令的当前工作目录,放在任意子目录下规则都不会生效。
2. 补充完善忽略规则
你当前使用的**/node_modules规则本身可以匹配所有层级的node_modules目录,可补充根目录匹配规则避免特殊场景遗漏,完整.dockerignore内容如下:
node_modules **/node_modules
3. 优化Dockerfile避免冗余操作
你当前的Dockerfile存在重复拷贝的冗余逻辑,可调整拷贝顺序优化构建缓存,同时避免冗余操作带来的预期外问题,优化后的Dockerfile参考:
FROM node:14.17.0-alpine WORKDIR /nodejs # 优先拷贝依赖文件,安装依赖的步骤可利用Docker缓存,代码修改无需重新装依赖 COPY package*.json ./ RUN npm install # 拷贝所有业务代码,此时.dockerignore会自动排除本地的node_modules目录 COPY . . CMD [ "node", "app.js" ]
4. 效果验证
构建完成后执行以下命令可查看镜像内的文件结构,确认本地的node_modules是否被成功排除:docker run --rm <你的镜像名称> ls -la
注意:
.dockerignore仅作用于本地文件往镜像内拷贝的阶段,拦截本地的node_modules被拷贝进镜像,你通过RUN npm install在镜像内部生成的node_modules属于正常构建产物,不会被忽略。
内容的提问来源于stack exchange,提问作者Xroid
相关产品推荐
相关产品推荐

