gpt4 book ai didi

node.js - Docker 构建需要很长时间来构建 nodejs 应用程序

转载 作者:行者123 更新时间:2023-12-02 19:18:40 25 4
gpt4 key购买 nike

在使用 docker build 命令构建镜像时,nodejs 应用程序的构建时间很长。

有一个大的挂起需要几分钟

08:03:15  Step 1/11 : FROM node:14.1.0-alpine AS build
08:03:15 ---> 0854fcfc1637
08:03:15 Step 2/11 : COPY server/package*.json /nodejs/server/
08:03:15 ---> Using cache
08:03:15 ---> 4996283ff991
08:03:15 Step 3/11 : WORKDIR /nodejs/server
08:03:15 ---> Using cache
08:03:15 ---> 93e5b63fa81d
08:03:15 Step 4/11 : RUN npm ci
08:03:15 ---> Using cache
08:03:15 ---> 2c825e02ea01
08:03:15 Step 5/11 : COPY server ./
08:03:15 ---> Using cache
08:03:15 ---> 69c024cde79f
08:03:15 Step 6/11 : WORKDIR /nodejs
08:03:15 ---> Using cache
08:03:15 ---> 49d7f8bd9514
08:03:15 Step 7/11 : COPY package*.json ./
08:03:16 ---> e82bee625c3e
08:03:16 Step 8/11 : RUN npm ci
08:03:16 ---> Running in ecfd57702906
...
08:03:49 added 1483 packages in 26.419s
08:09:40 Removing intermediate container ecfd57702906
...
08:09:40 ---> 7c6b67d85b0b
08:09:40 Step 9/11 : COPY *.json ./
08:09:43 ---> 0165efd1c97d
08:09:43 Step 10/11 : COPY src ./src/
08:09:51 ---> 42e54cee6b91
08:09:51 Step 11/11 : RUN npm run build:prod
08:09:51 ---> Running in af6f9b013d27

构建 Java 图像时不会发生这种情况。

我的 Dockerfile

FROM node:14.1.0-alpine AS build
COPY server/package*.json /nodejs/server/
WORKDIR /nodejs/server
RUN npm ci
COPY server ./

WORKDIR /nodejs
COPY package*.json ./
RUN npm ci
COPY *.json ./
COPY src ./src/
RUN npm run build:prod
...

我尝试使用 buildkit,但它具有相同的行为

08:37:20  #17 exporting to image
08:37:20 #17 exporting layers
08:50:12 #17 exporting layers 766.8s done

我还将 node_modules 添加到 .dockerignore 文件,但没有任何变化。

Docker 版本 19.03.6,构建 369ce74a3c

可能是什么问题?

“添加 1483 个包...”和“删除中间容器”之间发生了什么?

最佳答案

我已经找到问题的原因,如果有人遇到类似问题,我想分享。

较长的“导出层”时间是由其中一个层中存在的 node_modules 文件夹引起的。删除它解决了问题,但这确实是一种解决方法。

我将 npm ci 和 npm run build... 步骤合并在一起,并在同一步骤中删除了 node_modules。

RUN npm ci && npm run build:prod && rm -rf node_modules

所以 Dockerfile 中的最终构建阶段看起来像这样

FROM node:14.1.0-alpine AS build
COPY server/package*.json /nodejs/server/
WORKDIR /nodejs/server
RUN npm ci
COPY server ./

WORKDIR /nodejs
COPY package*.json ./
COPY *.json ./
COPY src ./src/
RUN npm ci && npm run build:prod && rm -rf node_modules
...

正如我所说,这只是一种解决方法,我认为根本原因是 Docker 在导出包含许多小文件(例如 node_modules 中的文件)的层时遇到问题。

关于node.js - Docker 构建需要很长时间来构建 nodejs 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61629339/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com