Вопрос или проблема
Я настроил проект монорепозитория с 3 пакетами
./project1
./project2
./project3
./shared
Каждый проект имеет свой собственный Dockerfile и файл Docker Compose
Я использовал npm link, чтобы использовать общую папку и добавить это в каждый package.json :
depedencies:{ "@my-shared/types": "file:../shared" }
И затем я могу импортировать так :
import { stuff } from '@my-shared/types';
Например, если я запущу команду “npm run dev” в моем project1 (который является Node API), всё работает отлично! Если бы не одно… я использую Docker. Если я запущу команду “docker compose up” в папке ./project1, я получу ошибку, потому что не могу найти свою общую папку.
Это мой Dockerfile :
FROM node:lts-slim
ENV TZ=Europe/Paris
ADD . /app/
WORKDIR /app
RUN npm install
EXPOSE 3001
CMD npm run dev
А вот мой docker-compose :
services:
mongo:
image: mongo
container_name: mongodb
restart: always
volumes:
- dbdata:/data/db
networks:
- api-net
command: mongod --quiet --logpath /dev/null
environment:
- TZ=Europe/Paris
my-api:
build: .
image: my-api
restart: always
ports:
- 3001:3001
volumes:
- .:/app
depends_on:
- mongo
networks:
- api-net
environment:
- TZ=Europe/Paris
networks:
api-net:
driver: bridge
volumes:
dbdata:
Я думаю, что мне просто нужно добавить папку, но я не могу понять, как это сделать.
Спасибо за вашу помощь
Чтобы ваши приложения получили доступ к общим модулям, вам нужно включить их в раздел volumes вашего приложения, как так:
my-api:
build: .
image: my-api
restart: always
ports:
- 3001:3001
volumes:
- .:/app
- ./yourSharedFolderPath
depends_on:
- mongo
networks:
- api-net
environment:
- TZ=Europe/Paris
Ответ или решение
Проблема, с которой вы столкнулись, связана с тем, что при работе с Docker, конфигурация volumes должна включать все необходимые директории для вашего приложения, чтобы обеспечить доступ ко всем зависимостям, включая общий каталог.
Для решения вашей проблемы, вам необходимо убедиться, что папка ./shared
добавлена в секцию volumes
вашего сервиса my-api
в файле docker-compose.yml
. Вот как можно внести необходимые изменения:
- Откройте файл
docker-compose.yml
. - В интервале
my-api
добавьте путь к общей папке./shared
в секцииvolumes
.
Ваш изменённый файл docker-compose.yml
должен выглядеть следующим образом:
services:
mongo:
image: mongo
container_name: mongodb
restart: always
volumes:
- dbdata:/data/db
networks:
- api-net
command: mongod --quiet --logpath /dev/null
environment:
- TZ=Europe/Paris
my-api:
build: .
image: my-api
restart: always
ports:
- 3001:3001
volumes:
- .:/app
- ./shared:/app/shared # Добавлено монтирование общей папки
depends_on:
- mongo
networks:
- api-net
environment:
- TZ=Europe/Paris
networks:
api-net:
driver: bridge
volumes:
dbdata:
Обратите внимание на следующие моменты:
- В строке
- ./shared:/app/shared
вы монтируете папку./shared
из вашего локального окружения в контейнер Docker по адресу/app/shared
. Таким образом, контейнер будет видеть все файлы и папки в директорииshared
. - Убедитесь, что путь к общей папке
./shared
указывается корректно относительно места запуска вашегоdocker-compose up
.
После внесения этих изменений, попробуйте снова запустить команду docker compose up
из каталога ./project1
. Ваши проекты должны успешно находить общие модули и работать корректно в окружении Docker.
Если у вас возникнут дополнительные вопросы или потребуется помощь с другой конфигурацией, не стесняйтесь спрашивать!