Должен ли я копировать package-lock.json в образ контейнера в 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: > [email protected] 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 [email protected] 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
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Kubernetes - это портативная, расширяемая платформа с открытым исходным кодом для управления контейнерными рабочими нагрузками и сервисами, которая...
Как создать PHP Image с нуля
Как создать PHP Image с нуля
Сегодня мы создадим PHP Image from Scratch для того, чтобы легко развернуть базовые PHP-приложения. Пожалуйста, имейте в виду, что это разработка для...
17
0
9 215
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Это зависит от того, хотите ли вы везде иметь одинаковый env. Если да, необходим package-lock.json. Здесь есть хороший пост об этом: https://stackoverflow.com/a/64014814/4925213

Я предполагаю, что, поскольку я устанавливаю --only production, package-lock.json будет отличаться от того, что у меня есть в моей локальной среде разработки, верно? Потому что в devDependencies есть немного package.json. Должен ли я оставить это и игнорировать предупреждение?

cbdeveloper 10.12.2020 13:27

У вас должен быть флаг «dev» для devDependencies в package-lock.json, поэтому он должен оставаться прежним. При сборке для производства devDependencies следует исключить с помощью этого флага.

bohme 10.12.2020 13:41
Ответ принят как подходящий

Вы должны обязательно скопировать файл package-lock.json. У него немного другая роль, чем у файла package.json: package.json может заявить: «Я почти уверен, что мое приложение работает с версией 17 пакета react», где 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

Спасибо, я также нашел больше информации о npm ci и его поведении с devDependencies в этом другом вопросе/ответе: stackoverflow.com/questions/60065865/…

cbdeveloper 10.12.2020 13:42

Другие вопросы по теме