gpt4 book ai didi

node.js - Docker构建不使用npm ci中的缓存

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

我已经创建了Dockerfile并注意使用Docker缓存系统。我将package.jsonpackage-lock.json文件添加到一个干净的容器中,然后运行npm ci命令。如果没有更改package.jsonpackage-lock.json,我希望它可以从缓存中使用,但它会继续运行。
我想念什么吗?我的Dockerfile出问题了吗?

FROM node:13.10.1-stretch as base

ADD package.json /app/package.json
ADD package-lock.json /app/package-lock.json
WORKDIR /app

RUN npm ci --unsafe-perm

我得到的输出:
Step 1/12 : FROM node:13.10.1-stretch as base
---> 7aef30ae6655
Step 2/12 : ADD package.json /app/package.json
---> ce655a3453f2
Step 3/12 : ADD package-lock.json /app/package-lock.json
---> 797cda1e10b2
Step 4/12 : WORKDIR /app
Removing intermediate container 5b6929b80ad6
---> 80c2aac903c5
Step 5/12 : RUN npm ci --unsafe-perm
---> Running in 7732a8aca146
> fsevents@1.2.12 install /app/node_modules/webpack-dev-server/node_modules/fsevents
> node-gyp rebuild
make: Entering directory '/app/node_modules/webpack-dev-server/node_modules/fsevents/build'
SOLINK_MODULE(target) Release/obj.target/.node
COPY Release/.node
make: Leaving directory '/app/node_modules/webpack-dev-server/node_modules/fsevents/build'
[...]

最佳答案

假设您在添加package.json之前没有运行其他命令,那么Dockerfile很好,并且缓存了添加软件包文件的层。例如,我们构建了一个简单的Dockerfile,仅添加了package.json配置文件:

FROM node:13.10.1-stretch as base
ADD package.json /app/package.json

首次运行:
$ docker build -t so-example .
Sending build context to Docker daemon 3.072kB
Step 1/2 : FROM node:13.10.1-stretch as base
13.10.1-stretch: Pulling from library/node
[...]
Status: Downloaded newer image for node:13.10.1-stretch
---> 7aef30ae6655
Step 2/2 : ADD package.json /app/package.json
---> a7bb80c06ecb
Successfully built a7bb80c06ecb
Successfully tagged so-example:latest

第二次运行
$ docker build -t so-example .
Sending build context to Docker daemon 3.072kB
Step 1/2 : FROM node:13.10.1-stretch as base
---> 7aef30ae6655
Step 2/2 : ADD package.json /app/package.json
---> Using cache
---> a7bb80c06ecb
Successfully built a7bb80c06ecb
Successfully tagged so-example:latest

如您所见,缓存有效。您能用一个最小的例子来验证一下吗?大部分时间缓存由于次优排序而中断。请检查以下内容:
  • 执行两次构建命令。缓存只能在第一次运行
  • 之后才能工作
  • 确保在您的Dockerfile中没有执行您可能没有在此处发布的其他步骤,这些步骤会使缓存
  • 无效
  • 是否正在运行任何清理命令?像docker prunedocker image prune(或旧版本中的手动列表/删除图像)之类的东西会删除您的图像
  • 检查/发布您的 call ,如何构建图像
  • 关于node.js - Docker构建不使用npm ci中的缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60845995/

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