我应该将`package-lock.json`复制到Dockerfile中的容器映像中吗



这是我的Dockerfile:

FROM node:12-slim
ENV NODE_ENV=production
WORKDIR /
# COPY . . # COPY ENTIRE FOLDER ?
COPY ./package.json ./package.json
COPY ./dist ./dist
RUN npm install --only=production
EXPOSE 8080
ENTRYPOINT npm start

这是我的.dockerignore文件:

node_modules

你看,我只是在复制package.json,而不是package-lock.json。我猜想,由于我将运行RUN npm install来构建映像,所以我认为它应该创建自己的package-lock.json

但我在构建过程中收到了以下警告:

> Step #0: > protobufjs@6.10.2 postinstall /node_modules/protobufjs
> Step #0: > node scripts/postinstall
> Step #0:
> Step #0: npm notice created a lockfile as package-lock.json. You should commit this file.
> Step #0: npm WARN knative-serving-helloworld@1.0.0 No repository field.    
> Step #0: 
> Step #0: added 304 packages from 217 contributors and audited 312 packages in 15.27s

那么,我应该将其添加到我的Dockerfile中吗?

COPY ./package-lock.json ./package-lock.json

您绝对应该将package-lock.json文件复制到中。它与package.json文件的角色略有不同:package.json可以声明"我非常确信我的应用程序与CCD_ 11包的版本17一起工作";,其中CCD_ 12表示";我已经构建并测试了该包的17.0.1版本;。

一旦您拥有了这两个文件,就会有一个单独的npm ci命令针对这种情况进行了优化。

COPY package.json package-lock.json .
# Run `npm ci` _before_ copying the application in
RUN NODE_ENV=production npm ci
# If any file in `dist` changes, this will stop Docker layer caching
COPY ./dist ./dist

这取决于您是否希望在任何地方都有完全相同的env。如果是,则需要package-lock.json。这里有一个很好的帖子:https://stackoverflow.com/a/64014814/4925213

最新更新