'How to connect nodeJS docker container to mongoDB

I have problems to connect a nodeJS application which is running as a docker container to a mongoDB. Let me explain what I have done so far:

$ docker ps

CONTAINER ID    IMAGE        COMMAND                  CREATED        STATUS        PORTS        NAMES
3a3732cc1d90    mongo:3.4    "docker-entrypoint..."   3 weeks ago    Up 3 weeks    27017/tcp    mongo_live

As you can see, there is already a mongo docker container running.

Now I'm running my nodeJS application docker container (which is a build from meteorJS):

$ docker run -it 0b422defbd59 /bin/bash

In this docker container I want to run the application by running:

$ node main.js

Now I'm getting the error

Error: MONGO_URL must be set in environment

I already tried to set MONGO_URL by setting:

ENV MONGO_URL mongodb://mongo_live:27017/

But this doesn't work:

MongoError: failed to connect to server [mongo_live:27017] on first connect

So my question is how to connect to a DB, which is - as far as I understand - 'outside' of the running container. Alternativly how do I set up a new DB to this container?



Solution 1:[1]

When you run containers each container works in independent network. Because one container cant connect to other point to point.

The are 3 ways to connect containers

  1. Have a little fuss with low-level docker network magic
  2. Connect container through localhost. Each container must expose ports on localhost (as your mongo_live). But you need add to host ile on localhost 127.0.0.1 mongo_live (This is the simplest way)
  3. Use docker-compose. It convenient tool for working many containers together. (This is right way)

Add mongodb to application container is not docker way.

Solution 2:[2]

Please use below snippet for your docker-compose.yml file, replace comments with your actuals. Should solve your problem.

version: '2'
    services:
      db:
        build: <image for mongoDB>
        ports:
          - "27017:27017"  # whatever port u r using
        environment:
          #you can specify mondo db username and stuff here
        volumes:
          - #load default config for mondodb from here
          - "db-data-store:/data/db" # path depends on which image you use
        networks:
          - network
     nodejs:
        build: #image for node js
        expose:
          - # mention port for nodejs
        volumes:
          - #mount project code on container
        networks:
          - network
        depends_on:
          - db

networks:
  network:
    driver: bridge

Please use the below links for references :
1) NodeJs Docker
2) MongoDb docker
3) docker-compose tutorial

Best of Luck

Solution 3:[3]

I had problem how to connect my server.js to mongodb. And that's how i solved it hope you find it useful. Tap For My Screenshot

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 Bukharov Sergey
Solution 2 Deep Singh Baweja
Solution 3 Ultradx