【问题标题】:Should I copy `package-lock.json` to the container image in Dockerfile?我应该将 `package-lock.json` 复制到 Dockerfile 中的容器映像吗?
【发布时间】:2021-03-21 20:47:34
【问题描述】:

这是我的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

【问题讨论】:

    标签: docker npm dockerfile package.json docker-build


    【解决方案1】:

    您绝对应该将package-lock.json 文件复制到其中。它与package.json 文件的作用略有不同:package.json 可以声明“我很确定我的应用程序适用于react 包的第 17 版”,其中package-lock.json 表示“我已经使用该软件包的 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
    

    【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 我想既然我正在安装--only productionpackage-lock.json 将与我在本地开发环境中的不同,对吧?因为package.json 中有一些devDependencies。那我应该把它排除在外并忽略警告吗?
    • 你应该在 package-lock.json 中有 devDependencies 的“dev”标志,所以它应该保持不变。当您为生产构建时,应该使用该标志排除 devDependencies。
    猜你喜欢
    • 2017-11-16
    • 2018-07-09
    • 2017-11-17
    • 2017-12-16
    • 1970-01-01
    • 2021-05-13
    • 2020-06-26
    • 1970-01-01
    • 2016-10-13
    相关资源
    最近更新 更多