Unable to connect a docker-contained mongodb with mongo compass

87 Views Asked by At

I have made a mongodb inside a docker container, .yml file

  mongo:
    image: mongo:5.0
    restart: always
    volumes: 
      - demo-data:/data/db
      - ./mongo-admin.js:/docker-entrypoint-initdb.d/mongo-admin.js
    environment:
      MONGO_INITDB_ROOT_USERNAME: root
      MONGO_INITDB_ROOT_PASSWORD: password
      MONGO_INITDB_DATABASE: demo

It is running and working. I can view the db in mongo express. It is connected with mongoose in node server.

const connection = await mongoose.connect('mongodb://demo:password@mongo:27017/demo', { useNewUrlParser: true, useCreateIndex: true, useUnifiedTopology: true }, err => {
    if (err) console.log('Error connecting to database', err);
  });

I have tried to connect with so many ip, none of them works. All container IP, localhost, 127.0.0.1.

Either authentication error or time out error.

How do I properly connect it step by step.

Updates these string not working-

mongodb://root:password@mongo:27017/demo mongodb://demo:password@mongo:27017/demo mongodb://root:password@localhost:27017/demo mongodb://root:[email protected]:27017/demo mongodb://root:[email protected]:27017/demo mongodb://root:[email protected]:27017/demo

run docker ps command in window it returns these info

CONTAINER ID   IMAGE                COMMAND                  CREATED          STATUS          PORTS                    NAMES

dd753046aacb   mongo:5.0            "docker-entrypoint.s…"   24 minutes ago   Up 24 minutes   27017/tcp                demo-server-mongo-1
1

There are 1 best solutions below

9
quoc9x On

In your connection string, It seems you have confused between MONGO_INITDB_ROOT_USERNAME and MONGO_INITDB_DATABASE.

You should change connection string from

mongodb://demo:password@mongo:27017/demo

to

mongodb://root:password@mongo:27017/demo

and expose port of container if you connect from host (By default, you can't use container name, if you connect from host).

mongo:
  image: mongo:5.0
  restart: always
  ports:
    - '27017:27017'
  volumes: 
    - demo-data:/data/db
    - ./mongo-admin.js:/docker-entrypoint-initdb.d/mongo-admin.js
  environment:
    MONGO_INITDB_ROOT_USERNAME: root
    MONGO_INITDB_ROOT_PASSWORD: password
    MONGO_INITDB_DATABASE: demo

Then, connection string will look like:

mongodb://demo:password@localhost:27017/demo

or

mongodb://demo:[email protected]:27017/demo