У меня есть приложение node.js, которое компилирует версию времени выполнения в папку dist
. поэтому файл package.json
указывает стартовый скрипт node dist/index.js
.Сбой при запуске приложения
теперь я хочу контейнеризации его, но контейнер не нужно иметь каталог распространения и эти файлы действительно должны жить в корне приложения, таким образом, мой Dockerfile
содержит строки
COPY package.json /usr/src/app/
COPY dist/* /usr/src/app/
, какие места файлы времени выполнения на изображении. У меня есть проблема в том, что, когда файл докер выдает свою последнюю команду:
CMD ["npm", "start"]
это не удается, потому что index.js
теперь в неправильном месте (потому что он ищет его в несуществующей директории распределения). Я мог бы решить эту проблему, выпустив:
CMD ["node", "index.js"]
вместо этого, но это похоже на неправильную вещь. Каков правильный подход?
* обновление I *
я модифицировал index.js
поэтому он может работать от корня проекта (т.е. он ожидает найти необходимые ресурсы, в папке dist/
) путем выдачи node dist/index.js
, но конечно, это тоже проблема, так как нет каталога распространения. как это вообще подходило?
Да, нет причин использовать 'npm start'. Кроме того, посмотрите файл '.dockerignore' [1], который поможет вам использовать только файлы' COPY'. [1] https://docs.docker.com/engine/reference/builder/#dockerignore-file –
спасибо вам (+1). это работает красиво – ekkis
@PavolPitonak, на самом деле есть. Я обнаружил, что переменные среды из раздела конфигурации пакета package.json не загружаются, если я не запускаю его через npm start – ekkis