У меня есть следующее 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.