'Connect NodeJS App Running Locally to MongoDB on docker container

I am getting error when attempting connection from localhost to MongoDB running in docker container

Error: Could not call function connect due to MongoServerSelectionError: //getaddrinfo ENOTFOUND mongo at MongoServerSelectionError: getaddrinfo ENOTFOUND mongo\n //at Timeout._onTimeout

Use Case -

I start my NodeApp locally via the npm start command The App attempts a connection to MongoDB

I have already started my MongoDB as a container via command docker-compose -f docker-compose.backing-services.yaml up -d --build mongo mongo02 mongo03

Below is the 'docker-compose.backing-services.yaml' file

services:
  mongo:
    image: mongo:4.4.3
    restart: always
    container_name: mongodb
    entrypoint: ['/usr/bin/mongod', '--noauth', '--bind_ip_all', '--replSet', 'rs0']
    env_file:
      - ./.env
    ports:
      - 27017:27017
    volumes:
      - mongodata01:/data/db
    networks:
      - my-network
  mongo02:
    image: mongo:4.4.3
    restart: always
    container_name: mongodb02
    entrypoint: ['/usr/bin/mongod', '--noauth', '--bind_ip_all', '--replSet', 'rs0']
    env_file:
      - ./.env
    ports:
      - 27018:27017
    volumes:
      - mongodata02:/data/db
    networks:
      - my-network
  mongo03:
    image: mongo:4.4.3
    restart: always
    container_name: mongodb03
    entrypoint: ['/usr/bin/mongod', '--noauth', '--bind_ip_all', '--replSet', 'rs0']
    env_file:
      - ./.env
    ports:
      - 27019:27017
    volumes:
      - mongodata03:/data/db
    networks:
      - my-network

volumes:
  mongodata01:
  mongodata02:
  mongodata03:
networks:
  my-network:
    name: my-network

Now in my app when I try to connect/ping mongodb

uri = 'mongodb://mongo,mongo02,mongo03:27017'
//Tried different URs too e.g. mongodb://mongo,mongo02,mongo03:27017/?replicaset=rs0 , mongodb://mongo:27017
connectionOptions = { useUnifiedTopology: true }

new MongoClient(uri, connectionOptions).ping

//Throws error - Error: Could not call function connect due to MongoServerSelectionError: //getaddrinfo ENOTFOUND mongo at MongoServerSelectionError: getaddrinfo ENOTFOUND mongo\n    //at Timeout._onTimeout

Can someone tell what is wrong or what else is missing?



Solution 1:[1]

For mongo URI you must use your mongodb service name instead 127.0.0.1 or localhost. You are missing the environment variable in your docker-compose.backing-services.yaml file, like this:

 environment:
      - MONGO_URI=mongodb://mongodb-myapp:27017/myapp

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 DWA