【问题标题】:How to make docker build (& Docerfile) respect the node version I set in package.json?如何使 docker build (& Docerfile) 尊重我在 package.json 中设置的节点版本?
【发布时间】:2022-02-17 10:45:07
【问题描述】:

我们的 Node.js 项目需要 Node 14 或更高版本,所以我在 package.json 中设置了它

  "engines": {
    "node": ">=14"
  }

但是 Dockerfile(其他一些开发人员编写的)不尊重这一点,看起来像这些

FROM node:12-alpine3.14
COPY package*.json ./
ENV NODE_ENV production
# RUN npm install -g npm@latest
RUN npm install
...

docker build 成功,但 docker run 由于节点 12 而失败。

如何让docker build 尊重我在 package.json 中设置的 nodejs 版本?

请注意,只需更新FROM node:14-alpine3.14,即可轻松解决此问题。但这不是我的问题。例如,假设将来项目需要 node16,我们在package.json 中更新它但忘记更新 Dockerfile,我需要一种方法使 docker build 失败。

【问题讨论】:

    标签: node.js docker npm dockerfile package.json


    【解决方案1】:

    我认为 make docker build failed 可能是唯一的方法(也可以参考Make docker build fail if tests fail)。

    所以我找到了两种方法来做到这一点。

    A) 通过在 Dockerfile 中使用 RUN yarn 而不是 RUN npm install,yarn 将发出错误并且 docker build 失败。然后通过检查失败的消息,构建 docker 镜像的人会知道 dockerfile 需要更新。

    #11 The engine "node" is incompatible with this module. Expected version ">=14". Got "12.22.8"
    #11 1.363 error Found incompatible module.
    #11 1.364 info Visit https://yarnpkg.com/en/docs/cli/install for documentation about this command.
    ------
    executor failed running [/bin/sh -c yarn]: exit code: 1
    

    B) 创建一个.npmrc 并设置engine-strict=true 所以npm install 将失败。检查How to specify/enforce a specific node.js version to use in package.json?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-10-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-21
      • 1970-01-01
      • 2020-01-24
      • 1970-01-01
      相关资源
      最近更新 更多