使多个Node js dockerized应用通信至mongodb docker

问题描述 投票:1回答:1

我已经建立了两个共享共同数据库的NEST应用。我一直在尝试找出一种方法来使这两个应用程序从Mongo数据库容器中获取数据。我一直坚持这个过程。

带有应用程序1的docker-compose.yml

version: '3'

services:  
  backend:
    image: 'example-image_1:1.0.0'
    working_dir: /app/example-app-1/backend/example-app-1-api
    environment:
      - DB_URL=mongodb://0.0.0.0:27017/example_app_1
      - BACKEND_PORT=3333
      - BACKEND_IP=0.0.0.0
    restart: always
    network_mode: "host"
    ports:
      - '3333:3333'
    command: ['node', 'main.js']
    depends_on:
      - mongodb

    expose:
      - 3333

  mongodb:
    image: 'mongo:latest'
    environment:
      - 'MONGODB_DATABASE="example_app_1"'
    ports:
      - '27017:27017'
    expose:
      - 27017

带有app-2的docker-compose.yml

version: '3'

services:   
  backend:
    image: 'example_app_2:1.0.0'
    working_dir: /app/example_app_2/backend/example-app-2-api
    environment:
      - DB_URL=mongodb://0.0.0.0:27017/example_app_2
      - BACKEND_PORT=8888
      - BACKEND_IP=0.0.0.0
    restart: always
    ports:
      - '8888:8888'
    command: ['node', 'main.js']
    expose:
      - 8888

  mongodb:
    image: 'mongo:latest'
    environment:
      - 'MONGODB_DATABASE="example_app_2"'
    ports:
      - '27017:27017'
    expose:
      - 27017

我需要帮助使这些应用与普通容器通信-mongodb

Click link for Architecture Setup

node.js docker docker-compose nestjs docker-container
1个回答
0
投票

由于您使用的是2个不同的docker-compose.yml,因此实际上是在2个docker-networks上运行2个后端和2个mongodb

2个mongo中的一个将无法启动,因为该端口已被占用。

选项1(更细):

services:   
  backend_1:
      ...
    ports:
      - '8888:8888'
  backend_2:
      ...
    ports:
      - '8899:8899'

  mongodb:
    ports:
      - '27017:27017'

此设置在同一网络上提供3个容器。现在,您可以从<mongo_ip>:27017

的两个后端访问mongo

选项2(难看):

services:   
  backend:
      ...
    ports:
      - '8888:8888'

  mongodb:
    ports:
      - '27017:27017'

并且在另一个docker-compose中

services:   
  backend:
      ...
    ports:
      - '8888:8888'

此设置在2个不同的网络上提供3个容器。在此设置中,每个docker-compose.yml都有自己的docker网络,因此从第二个后端服务中,您必须连接到另一个docker网络才能访问该容器。

© www.soinside.com 2019 - 2024. All rights reserved.