Monorepo с Docker Compose, перезагрузка зависимостей - PullRequest
0 голосов
/ 30 марта 2020

У меня есть следующее Docker Составить конфигурацию:

foo-service:
    build:
      context: ./services/foo
      args:
        - NPM_TOKEN=${NPM_TOKEN}
    volumes:
      - ./services/foo/:/app
      - ./node_modules:/app/node_modules
    working_dir: /app
    command: sh -c "yarn dev"
    ports:
      - 8088:8088
    environment:
      - NODE_ENV=development
      - PORT=8088

Со связанным Dockerfile (в / services / foo)

FROM node:10.16.0-alpine

ARG NPM_TOKEN
ENV NPM_TOKEN="${NPM_TOKEN}"

COPY package.json .
COPY .npmrc .

RUN yarn

RUN rm -f .npmrc

И yarn dev cmd:

"dev": "npx nodemon lib/"

(я использую TS для компиляции из /src до /lib внутри каждого каталога службы.

Я использую рабочие пространства Yarn в сочетании с Lerna.

Когда я запускаю docker-compose up --build, все раскручивается, устанавливается и работает правильно.

TS правильно компилирует файлы при изменении, которые затем извлекаются Nodemon и перезагружают узел процесс внутри контейнера Docker (через docker -compose)

Однако, если я изменяю зависимость foo-service, процесс узла контейнера Docker не только не перезапускается, но и перезапускается весь контейнер, изменения не принимаются.

Моя (наивная) догадка:

Когда Docker Compose запускается впервые, он забирает пакет. json внутри каждой службы и устанавливает зависимости. Однако, когда nodemon получает изменение, он перезапускает содержимое Docker Процесс узла r, но я предполагаю, что не переустанавливает зависимости. Как я могу получить контейнер docker, чтобы получить измененные и символические ссылки (рабочие области пряжи / lerna), deps и перезапустить процесс узла? (также, очевидно, я не публикую пакеты в npm при каждом изменении кода, поэтому версия пакета, содержащая контейнер Docker, находится внутри пакета. json будет указывать на ту же версию, опубликованную в npm, а не на локальный измененный деп)

Мне определенно не нужно и не нужно переустанавливать все депы с npm при изменении кода внутри docker.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...