Search code examples
mongodbdockerdocker-composeyamlmongo-express

mongo-express | Could not connect to database using connectionString: mongodb://127.0.0.1:27017/"


When trying to spin up a docker container with docker-compose, I get the following error message:

 (node:8) [MONGODB DRIVER] Warning: Current Server Discovery 

and Monitoring engine is deprecated, and will be removed in a future version. To use the new Server Discover and Monitoring engine, pass option { useUnifiedTopology: true } to the MongoClient constructor.
mongo-express    | Could not connect to database using connectionString: mongodb://127.0.0.1:27017/"

I noticed that mongo-express always adds a double quote to the end of my connection string, is this intentional or did I mess something up in my docker-compose file?

The file:

version: '3.8'
services:
    mongodb:
        image: mongo:latest
        container_name: mongodb
        restart: unless-stopped
        networks:
            - backbone
        expose:
            - 27017
        ports:
            - 27017:27017
        env_file:
            - ./.env
        command: [--auth]
        environment:
            - MONGO_INITDB_ROOT_USERNAME=${DB_USERNAME}
            - MONGO_INITDB_ROOT_PASSWORD=${DB_PASSWORD}
        volumes:
            - ./data:/data/db

    mongo-express:
        image: mongo-express
        container_name: mongo-express
        restart: unless-stopped
        networks:
            - backbone
        ports:
            - 8081:8081
        environment:
            - ME_CONFIG_MONGODB_SERVER=127.0.0.1
            - ME_CONFIG_MONGODB_URL="mongodb://127.0.0.1:27017"
            - ME_CONFIG_BASICAUTH_USERNAME=${DB_USERNAME}
            - ME_CONFIG_BASICAUTH_PASSWORD=${DB_PASSWORD}

networks:
    backbone:
        driver: bridge

I already tried updating my version of docker/docker-compose and mongodb.

How do I resolve the error? Or is there a workaround I could use?


Solution

  • In a container, localhost refers to the container itself. So when Mongo Express tries to connect to the database at localhost, it looks for the database inside the Mongo Express container.

    Docker compose let's you refer to containers using their container names, so you should change your Mongo Express environment variables to

        - ME_CONFIG_MONGODB_SERVER=mongodb
        - ME_CONFIG_MONGODB_URL="mongodb://mongodb:27017"