我应该将 `package-lock.json` 复制到 Dockerfile 中的容器镜像吗?
Should I copy `package-lock.json` to the container image in 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。这里有一个很好的post:
你绝对应该复制 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
这是我的 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。这里有一个很好的post:
你绝对应该复制 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