Docker 构建 - npm 版本与 lockfileVersion@1 不兼容

Gre*_*reg 2 shrinkwrap node.js npm docker

我正在尝试构建 React 应用程序的 Docker 映像。

这是 package.json 的第一部分:

{
  "name": "front",
  "version": "0.1.0",
  "private": true,
  "dependencies": {
    "@testing-library/jest-dom": "^5.14.1",
    "@testing-library/react": "^11.2.7",
    "@testing-library/user-event": "^12.8.3",
    "eslint": "^7.29.0",
    "html-react-parser": "^1.2.7",
    "npm": "^6.14.4",
    "react": "^17.0.2",
    "react-dom": "^17.0.2",
    "react-input-mask": "^3.0.0-alpha.2",
    "react-redux": "^7.2.4",
    "react-router-dom": "^5.2.0",
    "react-scripts": "^4.0.3",
    "redux": "^4.1.0",
    "semantic-ui-css": "^2.4.1",
    "semantic-ui-react": "^2.0.3",
    "web-vitals": "^1.1.2"
  },
Run Code Online (Sandbox Code Playgroud)

这是 Dockerfile:

# pull official base image
FROM node:13.12.0-alpine

# set working directory
WORKDIR /app

# add `/app/node_modules/.bin` to $PATH
ENV PATH /app/node_modules/.bin:$PATH

ARG REACT_APP_BASEURL='https://localhost:8081'
ENV REACT_APP_BASEURL=$REACT_APP_BASEURL

# install app dependencies
COPY package.json ./
COPY package-lock.json ./
RUN npm install

# add app
COPY . ./

#EXPOSE
EXPOSE 3000

# start app
CMD ["npm", "start"]
Run Code Online (Sandbox Code Playgroud)

因此,我使用命令行构建:

docker build -f Dockerfile -t api_front .
Run Code Online (Sandbox Code Playgroud)

我有这个错误消息:

npm WARN read-shrinkwrap 此版本的 npm 与 lockfileVersion@1 兼容,但为 lockfileVersion@2 生成了 package-lock.json。我会尽力做到最好!

如果我用 检查 npm 的版本npm -v,我有最新的版本(7.19.1)

如果我转到项目文件夹并运行npm install,一切都是最新的

如果我使用 启动应用程序npm start,则一切正常并且 api 正在运行...

问题是什么?

编辑:解决方案

我改变了:

FROM node:13.12.0-alpine
Run Code Online (Sandbox Code Playgroud)

FROM node:latest
Run Code Online (Sandbox Code Playgroud)

Ama*_*n B 6

用于生成文件的 npm (v7.19.1) 版本比节点 13.12.0package-lock.json的 docker 镜像中的 npm (v6.14.4) 版本更新。

1: The lockfile version used by npm v5 and v6.
2: The lockfile version used by npm v7, which is backwards compatible to v1 lockfiles.
Run Code Online (Sandbox Code Playgroud)

您可以在此处阅读有关锁定文件版本的更多信息

您可以升级 docker 映像以使用最新版本,也可以降级 npm 以生成兼容的版本package-lock.json

编辑#1:

您必须将 docker 文件的第一行替换为:

FROM node:16.4.2
Run Code Online (Sandbox Code Playgroud)