Error: Cannot find module '../controllers/thermostatLogic'

Вот мой докерфайл

FROM node:10-alpine
LABEL version="1.02"
RUN mkdir -p /app/node_modules && chown -R node:node /app
USER node
WORKDIR /app
COPY . /app
RUN npm install
RUN npm audit fix
RUN ls
RUN cd ./controllers && ls
RUN mkdir uploads &&\
cd uploads &&\
touch uploadedFile.csv
RUN cd ..
RUN ls
CMD npm start
EXPOSE 1000

Я запускаю команду docker build -t hvacdoctor ., а затем. Когда он запускает команду ls, он возвращает:

 ---> Running in a6d2b49092ef
INSIDE
app.js
bin
controllers
env.js
exampleDevices.json
node_modules
package-lock.json
package.json
public
readme.md
routes
schema
test
views
yarn.lock
Removing intermediate container a6d2b49092ef

Докер запустить hvacdoctordocke: последние


Error: Cannot find module '../controllers/t***Logic'
    at Function.Module._resolveFilename (internal/modules/cjs/loader.js:636:15)
    at Function.Module._load (internal/modules/cjs/loader.js:562:25)
    at Module.require (internal/modules/cjs/loader.js:692:17)
    at require (internal/modules/cjs/helpers.js:25:18)
    at Object.<anonymous> (/home/node/app/controllers/fileLogic.js:8:19)
    at Module._compile (internal/modules/cjs/loader.js:778:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:789:10)
    at Module.load (internal/modules/cjs/loader.js:653:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:593:12)
    at Function.Module._load (internal/modules/cjs/loader.js:585:3)
    at Module.require (internal/modules/cjs/loader.js:692:17)
    at require (internal/modules/cjs/helpers.js:25:18)
    at Object.<anonymous> (/home/node/app/routes/index.js:4:19)
    at Module._compile (internal/modules/cjs/loader.js:778:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:789:10)
    at Module.load (internal/modules/cjs/loader.js:653:32)

Это все работает с установкой npm и запуском npm без ошибки OUT docker, но почему это проблема внутри него?

Я пробовал несколько разных методов (хотя git клон отсутствует, потому что мне нужен SSO для этого и т. Д.)

These are the install instructions
1) download bash / node
2) create a folder called uploads and a file called uploadedFile.csv -make sure the file is in the folder.
3) npm install 
4) npm start

Изменить - вот скриншот текущей структуры папок.

folder structure

Мысли?

Изменить - было предложено запустить программу с помощью следующего docker-compose.yml

node-app:
  container_name: node-app
  image: node:latest
  restart: always
  volumes:
   - ./:/home/node/app
  working_dir: /home/node/app
  ports:
   - 4000:4000
  networks:
   - main-network
  command: "tail -f /dev/null && npm start"


Changed package.json

"main": "index.js",
"scripts": {
  "preinstall": "npm i nodemon -g",
  "start": "nodemon index.js",
}

^^ С этим предложенным сценарием запуска nodemon запускает index.js рекурсивно - если я удаляю nodemon из команды, он не может найти index.js. - Я, скорее всего, отредактирую это, так как оно находится в папке маршрутов, чтобы начать как route / index.js

ТАКЖЕ чтобы добавить ясности - ранее я не работал с nodemon - я запускал NPM start, чтобы запустить мой проект, если это имеет значение (то есть я могу git clone и запустить npm install && npm start, и это будет работать.

1
Jason Harder 27 Окт 2019 в 21:31

2 ответа

Лучший ответ

Попробуйте приведенную ниже конфигурацию докера для приложения узла. Это будет работать для вас.

 node-app:
  container_name: node-app
  image: node:latest
  restart: always
  volumes:
   - ./:/home/node/app
  working_dir: /home/node/app
  ports:
   - 4000:4000
  networks:
   - main-network
  command: "tail -f /dev/null && npm start"

Здесь ниже - package.json

"main": "index.js",
"scripts": {
  "preinstall": "npm i nodemon -g",
  "start": "nodemon index.js",
}
1
zshan4444 28 Окт 2019 в 05:30

Оказалось, что он не может найти его, так как мой Mac не чувствителен к типу, но ubuntu - есть. Стандартизация имен файлов исправила это.

Этот докер-файл работал нормально

FROM node:12.14.0-alpine
LABEL version="1.02"

#create working directories etc.
RUN mkdir -p /app

# Create a /App Directory to install the application in
WORKDIR /app

# Copy all files from the main project to the container
COPY . /app/

RUN npm install
# COPY package*.json ./app/
# RUN npm install
# Standard npm commands
## DELETE THE FOLLOWING WHEN DOCKER CONTAINER IS FIXED
RUN cd node_modules

# create an uploads directory , go into it and add a placeholder file to avoid bug.
RUN mkdir uploads
RUN touch uploads/uploadedFile.csv
#go back into root folder
# RUN cd ..
# RUN ls

# start project and expose port 3000 as localhost
CMD node ./bin/www
EXPOSE 3000
0
Jason Harder 31 Дек 2019 в 22:02