【发布时间】:2021-09-05 19:17:25
【问题描述】:
我正在创建基于Nestjs 的微服务并使用nestjs cli 创建monorepo。创建 monorepo 后,我在项目的根路径中创建了 Dockerfile 和 docker-compose 文件。然后我在每个嵌套应用程序中创建了.env 文件,并在docker-compose 文件中针对各自的服务引用了它。由于相对的.env 文件,docker-compose 不会从root 路径运行,而是从.env 文件所在的位置运行,即嵌套应用程序并且它可以完美运行。服务启动,我可以很好地使用该应用程序。现在的问题是,即使我正确设置了卷,我也无法从主机对其进行热重载或实时重载 docker 服务。
基本目录结构如下:
apps/
nest-auth/.env
queues/.env
package.json
Dockerfile
docker-compose.yaml
下面是分别遵循上述结构的Dockerfile & docker-compose 文件。
FROM node:14.16.0 As development
ARG APP_TO_BUILD
WORKDIR /demo/app
COPY package*.json ./
RUN npm install --only=development
RUN npm install argon2 --build-from-source
COPY . .
RUN npm run build -- ${APP_TO_BUILD}
CMD ["sh", "-c", "npm start -- ${APP_TO_BUILD}"]
version: "3.7"
services:
api:
image: "demo-main-app:${IMAGE_TAG}"
container_name: main_app
build:
context: .
target: ${NODE_ENV}
args:
APP_TO_BUILD: ${APP_TO_BUILD}
volumes:
- ./apps/nest-auth:/demo/app/apps/nest-auth
- /demo/app/node_modules
ports:
- 3000:3000
env_file:
- ./apps/nest-auth/.env
- ./apps/nest-auth/docker.env
networks:
- demo
worker:
image: "demo-worker:${IMAGE_TAG}"
container_name: worker_app
build:
context: .
target: ${NODE_ENV}
args:
APP_TO_BUILD: ${APP_TO_BUILD}
volumes:
- ./apps/queues:/demo/app/apps/queues
- /demo/app/node_modules
env_file:
- ./apps/queues/.env
- ./apps/queues/docker.env
networks:
- demo
depends_on:
- redis
redis:
container_name: redis
image: redis:6
ports:
- 6379:6379
networks:
- demo
networks:
demo:
external: false
name: demo-network
【问题讨论】:
标签: node.js docker-compose nestjs monorepo