2016-03-02 6 views
0

У меня есть приложение 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, но конечно, это тоже проблема, так как нет каталога распространения. как это вообще подходило?

ответ

2

Я бы запрограммировал все ваши javascript, требующие вызовов относительно текущего файла без ссылки на каталог «dist». Итак, допустим, что в корне проекта есть index.js и routes.js. index.js загружает маршруты через var routes = require('./routes'). Когда вы их компилируете, скомпилируйте их из каталога dist, и все должно быть хорошо.

Если вы хотите запустить через npm start из корня проекта, вы можете настроить это, чтобы сделать node dist/index.js.

Для докеров нет причин использовать npm для запуска приложения. Это ненужный процесс, который не принесет никакой пользы. Просто запустите через node index.js в вашем файле докеров с WORKDIR /usr/src/app.

+1

Да, нет причин использовать 'npm start'. Кроме того, посмотрите файл '.dockerignore' [1], который поможет вам использовать только файлы' COPY'. [1] https://docs.docker.com/engine/reference/builder/#dockerignore-file –

+0

спасибо вам (+1). это работает красиво – ekkis

+0

@PavolPitonak, на самом деле есть. Я обнаружил, что переменные среды из раздела конфигурации пакета package.json не загружаются, если я не запускаю его через npm start – ekkis

Смежные вопросы