Приложение для горячей перезагрузки узла Docker с помощью nodemon в Windows 10 - PullRequest
0 голосов
/ 21 ноября 2018

У меня есть экспресс-приложение, и я пытаюсь настроить горячую перезагрузку с помощью nodemon, используя docker для Windows 10 в качестве среды разработки.Однако, когда я устанавливаю npm на том, он не работает.

В PowerShell я использую такой том:

docker build -t node-api.

docker run --rm -it -p 8080: 8080 -v "$ {PWD}: / usr / src / app" node-api

Что выводит эту ошибку:

[nodemon] 1.18.6
[nodemon] to restart at any time, enter `rs`
[nodemon] watching: *.*
[nodemon] starting `node server/server.js`
internal/modules/cjs/loader.js:605
    throw err;
    ^

Error: Cannot find module 'express'
    at Function.Module._resolveFilename (internal/modules/cjs/loader.js:603:15)
    at Function.Module._load (internal/modules/cjs/loader.js:529:25)
    at Module.require (internal/modules/cjs/loader.js:658:17)
    at require (internal/modules/cjs/helpers.js:22:18)
    at Object.<anonymous> (/usr/src/app/server/server.js:1:79)
    at Module._compile (internal/modules/cjs/loader.js:722:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:733:10)
    at Module.load (internal/modules/cjs/loader.js:620:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:560:12)
    at Function.Module._load (internal/modules/cjs/loader.js:552:3)
[nodemon] app crashed - waiting for file changes before starting...

Если я исключаю флаг -v и запуск Docker, то он запускается без ошибок, но не обнаруживает изменений или перезапускается при сохранении файла.

Dockerfile

FROM node:alpine

#Create app directory
WORKDIR /usr/src/app

#Install nodemon for hot reloading
RUN npm install nodemon -g

#Install app dependencies
#A wildcard is used to ensure both package.json AND package-lock.json are copied
COPY package*.json ./

RUN npm install

#Bundle app source
COPY . .

EXPOSE 8080
CMD [ "nodemon", "-L", "server/server.js" ]

Структура папок

server/

    >server.js

Dockerfile

package.json

Github repo для кода

1 Ответ

0 голосов
/ 22 ноября 2018

Проблема в том, что при монтировании всего каталога хоста app/ в качестве тома app/node_modules/ внутри контейнера будет перезаписан хостом app/, поэтому все зависимости отсутствуют.

Решениеэто только монтирование нужной вам папки с исходным кодом, т.е.

docker run --rm -it -p 8080:8080 -v "${PWD}/server:/usr/src/app/server" node-api
...