You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何通过Dockerfile构建NPM项目并导出编译文件到本地?

如何把Docker构建的编译文件导出到本地磁盘

嘿,我来帮你搞定这个问题!你提到的VOLUME其实是容器运行时用来挂载持久化目录的工具,并不适合在构建阶段把编译产物导出到本地。这里有两种更靠谱的方案,帮你轻松拿到编译后的文件:

方案一:多阶段构建 + docker cp 手动导出

这个方法不用大改你的Dockerfile,步骤简单直接:

  • 先按你现有的Dockerfile构建镜像:
docker build -t node-build-image .
  • 你可以启动一个临时容器,把编译后的目录(假设你的项目编译输出是dist目录,如果是build就替换成这个)复制到本地:
docker run --rm -v $(pwd)/local-dist:/tmp/export node-build-image cp -r ./dist /tmp/export

或者更省事的方式——直接从镜像里复制,不用启动容器:

docker create --name temp-container node-build-image
docker cp temp-container:/home/node/app/dist ./local-dist
docker rm temp-container

方案二:用Docker BuildKit 直接在构建阶段导出(推荐)

如果你想一步到位,在构建的时候就把产物写到本地,Docker BuildKit支持构建时挂载本地目录,效率更高。

  • 首先,确保你启用了BuildKit(临时启用的话,执行命令前加DOCKER_BUILDKIT=1,也可以配置成永久启用)。
  • 然后稍微修改你的Dockerfile,增加一个导出阶段:
# 第一阶段:完成项目编译
FROM node:10-alpine AS builder
RUN mkdir -p /home/node/app/node_modules && chown -R node:node /home/node/app
WORKDIR /home/node/app
COPY package*.json ./
USER node
RUN npm install
COPY --chown=node:node . .
RUN npm run build

# 第二阶段:把编译产物导出到本地(依赖BuildKit)
FROM scratch AS export
COPY --from=builder /home/node/app/dist /
  • 接着执行这个构建命令,指定输出到本地的local-dist目录:
DOCKER_BUILDKIT=1 docker build --output type=local,dest=./local-dist .

执行完之后,你当前目录下的local-dist文件夹里就会直接出现编译好的文件了!

小提示

  • 记得把命令里的dist替换成你项目实际的编译输出目录(比如有些React项目是build
  • BuildKit是Docker 18.09及以上版本支持的,现在大部分开发环境都已经兼容,这个方案比手动复制更高效,也更简洁

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

火山引擎 最新活动