Problem z node_modules w dockerze

0

Ostanio zaczełem bawić się dockerem i sprawia mi on dużo problemów kiedu próbuję go połączyć z nodem...

Problem polega na tym, że folder node_modules jest pusty mimo, że docker instaluje te paczki... w tym momencie pm2 wariuje i wywala milion bledow i "zawiesza" konsole (tak muli ze nie dziala nawet ctrl-c)...

To co chce osiagnac to stworzyc srodowisko ktore bedzie dzialac w dockerze i zeby po kazdej zmianie w kodzie nie trzeba bylo przebudowywac dockera. Chcę tak jakby odwzorować to co jest np. w obrazie wordpress'a gdzie tworzy się volume "./wordpress:/var/www/html" i cały wordpress jest w folderze wordpress.

Poniżej wrzucam pliki z dockera, ktoś może mi powiedzieć co jest z nimi nie tak?

Dockerfile

FROM node:10-alpine

RUN mkdir /src
WORKDIR /src

RUN mkdir /src/web
RUN mkdir /src/bot

ADD process.json /src/
ADD web/package.json /src/web
ADD bot/package.json /src/bot
RUN npm --prefix ./bot i ./bot
RUN npm --prefix ./web i ./web

RUN npm i pm2 -g

Docker-compose.yml:

version: '3.6'
services:
  mongo:
    build: ./database
    container_name: database
    volumes:
      - ./database/db:/data/db
    environment:
      - MONGO_INITDB_ROOT_USERNAME=root
      - MONGO_INITDB_ROOT_PASSWORD=example
    restart: always
    ports:
      - "27017:27017"

  web:
    build: ./src
    container_name: app
    environment:
      - NODE_ENV=dev
      - DATABASE_HOST=database
      - DATABASE_PORT=27017
      - DATABASE_USERNAME=root
      - DATABASE_PASSWORD=example
    command: ["pm2-runtime", "process.json"]
    volumes:
      - ./src/web:/src/web
      - ./src/bot:/src/bot
      - /src/web/node_modules
      - /src/bot/node_modules
    ports:
      - "80:80"
0

volumes są montowane dopiero po wykonaniu Dockerfile - co zresztą ma sens, bo inaczej Docker nie miałby sensownej możliwości keszowania budowanych kontenerów (tzn. dowolna zmiana w systemie plików musiałaby spowodować konieczność ponownego przebudowania wszystkiego).

Rzeczy typu npm install czy npm run build powinieneś odpalać ręcznie, wchodząc do kontenera, lub za pomocą skryptu w stylu:

docker-compose up --build -d && docker-compose exec moj-kontener npm run build

1 użytkowników online, w tym zalogowanych: 0, gości: 1