【问题标题】:Nestjs monorepo with relative environment variables in docker-composeNestjs monorepo 在 docker-compose 中具有相对环境变量
【发布时间】:2021-09-05 19:17:25
【问题描述】:

我正在创建基于Nestjs 的微服务并使用nestjs cli 创建monorepo。创建 monorepo 后,我在项目的根路径中创建了 Dockerfiledocker-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


    【解决方案1】:

    不确定我是否理解您的问题(虽然我没有看到任何问题......)但是,您可以通过以下方式欺骗环境:

    apps/
        nest-auth/.env
        queues/.env
    .env <------------- add this file
    package.json
    Dockerfile
    docker-compose.yaml
    

    然后在.env 中,您可以为每个环境定义路径:

    # content of .env file
    QUEUES_ENV=./queues/.env
    AUTH_ENV=./nest-auth/.env
    

    最后,在docker-compose.yml 你会使用它:

    # ... stuff here ...:
    
      api:
        # ... stuff here ...
        env_file:
          ${AUTH_ENV}
    
      worker:
        # ... stuff here ...
        env_file:
          ${QUEUES_ENV}
    

    【讨论】:

      猜你喜欢
      • 2015-06-17
      • 2019-01-07
      • 1970-01-01
      • 2022-01-11
      • 1970-01-01
      • 1970-01-01
      • 2022-01-01
      • 2018-02-03
      • 2019-02-25
      相关资源
      最近更新 更多