【发布时间】:2020-12-29 07:23:56
【问题描述】:
网上有很多人以不同的方式问同样的问题,但没有明确的答案。任何人都可以理解为什么docker build 在应用程序中存在package-lock.json 文件时会失败,但在不存在时会成功运行吗?貌似和npm有关,但不清楚。
Everybody 说删除package-lock.json,但它的存在是有原因的。
注意: npm install 在我的本地机器上工作正常,只是在 docker 容器中失败。
如果我有这个 Dockerfile:
# First Stage: Builder
FROM node:13.12.0-alpine AS build
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build
然后运行:
docker build -t container-tag ./
我明白了:
npm WARN tar ENOENT: no such file or directory, open '/app/node_modules/.staging/eventsource-c2615740/example/index.html'
npm WARN tar ENOENT: no such file or directory, open '/app/node_modules/.staging/eventsource-c2615740/example/sse-client.js'
npm WARN tar ENOENT: no such file or directory, open '/app/node_modules/.staging/react-router-a14663ae/README.md'
但是这个 Dockerfile 会运行成功:
# First Stage: Builder
FROM node:13.12.0-alpine AS build
WORKDIR /app
COPY package.json ./ #<-------- note that there is no start here
RUN npm install
COPY . .
RUN npm run build
【问题讨论】:
-
我不确定它是否回答了你的问题,这就是为什么它是一个评论,但我专注于这一部分:“注意:npm install 在我的本地机器上工作正常,只是在 docker 容器中失败” .如果您使用
npm install,则不确定是否具有相同版本的依赖项这就是 package-lock.json 的用途,为了拥有可重现的环境,由于版本控制而出现意外问题,您应该改用npm ci.如果这不能解决您的问题,您需要继续调查,但 IMO 这应该是第一步。希望对您有所帮助。 -
有道理 - 我不知道
npm ci,将了解更多信息 - 非常感谢
标签: node.js docker npm package-lock.json