#docker #npm-install
#docker #npm-install
Вопрос:
Используемый файл Dockerfile:
FROM node:8-alpine
WORKDIR /usr/src/app
COPY . .
RUN npm install
CMD ["npm", "run", "serve"]
EXPOSE 8080
И файл docker-compose.yml:
version: '3'
services:
app:
container_name: app
restart: always
build:
context: ./app
dockerfile: Dockerfile
ports:
- "8080:8080"
volumes:
- ./app:/usr/src/app
- ./logs:/logs
Структура папок следующая:
project/
|-- docker-compose.yml
|-- logs/
|-- app/
|-- Dockerfile
|-- package.json
При запуске docker-compose up --build
из project/ npm install
шаг выдает следующее примерно через одну минуту:
added 1684 packages from 1297 contributors and audited 36429 packages in 56.23s
found 0 vulnerabilities
Однако на npm run serve
шаге вывод в основном состоит в том, что модуль npm не найден, и, среди прочего, эта строка:
npm ПРЕДУПРЕЖДАЕТ, что локальный package.json существует, но node_modules отсутствуют, вы имели в виду установку?
Как происходит, npm install
фактически и определенно выполняется, но npm жалуется, что node_modules
не может быть найден?
Ответ №1:
У меня была такая же проблема, и я решил ее, просто следуя этой инструкции. Добавьте одну строку кода - /usr/src/app/node_modules
в файл docker-compose.yml в томах:
volumes:
- ${PWD-.}/name_of_your_app:/usr/src/app
- /usr/src/app/node_modules
Комментарии:
1. спасибо, он работает нормально, он устанавливает node_modules как в контейнере, так и локально
Ответ №2:
Обновление: в итоге я использовал только ./app/src
папку в качестве тома вместо ./app
.
Таким образом, /app/node_modules
не переопределяется томом хоста.
version: '3'
services:
app:
container_name: app
restart: always
build:
context: ./app
dockerfile: Dockerfile-dev
ports:
- "8080:8080"
volumes:
- ./app/src:/usr/src/app/src # <---- this
- ./logs:/logs