node_modules отсутствуют даже после установки npm в контейнер docker

#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