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

创建Docker镜像时,如何删除除build外的所有源码文件?

解决Docker镜像构建后删除源码的问题

问题分析

你遇到的两个方法失败原因如下:

  1. 第一个命令里多了错误的User关键字,且Node官方镜像默认使用sh而非bash,extglob是bash专属的扩展特性,sh不支持该语法。
  2. 第二个find命令报错是因为删除目录时,后续遍历到已被删除的子路径,触发"文件不存在"的提示。

修复方案

方案1:修正extglob命令并指定bash执行

去掉错误的User关键字,同时通过bash -c调用bash执行命令,启用extglob特性:

RUN bash -c 'shopt -s extglob; rm -rf !(build)'

方案2:调整find命令避免路径不存在问题

使用-prune跳过build目录,避免遍历已删除路径:

RUN find . -mindepth 1 -path ./build -prune -o -exec rm -rf {} +

或者用更简洁的-delete参数:

RUN find . ! -name '.' ! -name 'build' -delete

方案3:推荐使用多阶段构建(最优解)

多阶段构建无需删除源码,直接仅复制最终构建产物到新镜像,镜像体积更小、更安全:

# 第一阶段:构建阶段
FROM node:18.17.1 AS builder

WORKDIR /app

COPY package*.json ./
COPY tsconfig.json ./
COPY src/ ./src/
COPY .env ./

RUN npm install
RUN npm run build

# 第二阶段:生产镜像
FROM node:18.17.1-slim

WORKDIR /app

# 仅复制构建产物和运行必需文件
COPY --from=builder /app/build ./build
COPY --from=builder /app/package*.json ./
COPY --from=builder /app/.env ./

# 只安装生产依赖
RUN npm install --only=production

EXPOSE 4000

CMD ["node", "build/app.js"]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 23:10:59