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
Изменить - вот скриншот текущей структуры папок.
Мысли?
Изменить - было предложено запустить программу с помощью следующего 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, и это будет работать.
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",
}
Оказалось, что он не может найти его, так как мой 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
Похожие вопросы
Новые вопросы
javascript
По вопросам программирования на ECMAScript (JavaScript/JS) и его различных диалектах/реализациях (кроме ActionScript). Обратите внимание, что JavaScript — это НЕ Java. Включите все теги, относящиеся к вашему вопросу: например, [node.js], [jQuery], [JSON], [ReactJS], [angular], [ember.js], [vue.js], [typescript], [стройный] и т. д.