MongoDB on Docker (sharding) Connection failed

Viewed 119

I can't connect to my MongoDb router. This is my docker-compose:

    version: '3.5'
    
    volumes:
        mongoshard1_volume:
        mongoshard2_volume:
        mongoconf_volume:
    
    services:
        # MONGO DB SERVICES
        # Node storing the first shard mongoshard1:
            container_name: mongoshard1
            image: mongo
            command: mongod --shardsvr --replSet "mongors1" --dbpath /data/db --port ${MONGO_SHARD_PORT:-27017}
            restart: on-failure
            expose:
                - "${MONGO_SHARD_PORT:-27017}"
            environment:
                TERM: bash
                TZ: ${TIMEZONE}
            volumes:
                - mongoshard1_volume:/data/db
            entrypoint:
                - docker-entrypoint.sh
    
        # Node storing the second shard mongoshard2:
            container_name: mongoshard2
            image: mongo
            command: mongod --shardsvr --replSet "mongors2" --dbpath /data/db --port ${MONGO_SHARD_PORT:-27017}
            restart: on-failure
            expose:
                - "${MONGO_SHARD_PORT:-27017}"
            environment:
                TERM: bash
                TZ: ${TIMEZONE}
            volumes:
                - mongoshard2_volume:/data/db
    
        # Node storing the configuration for the cluster mongoconf:
            container_name: mongoconf
            depends_on: 
                - mongoshard1
                - mongoshard2
            image: mongo
            command: mongod --configsvr --replSet "mongorsconf" --dbpath /data/db --port ${MONGO_CONFIG_PORT:-27017}
            restart: on-failure
            expose: 
                - "${MONGO_CONFIG_PORT:-27017}"
            environment:
                TERM: bash
                TZ: ${TIMEZONE}
            volumes: 
                - mongoconf_volume:/data/db
    
        # Node acting as the router for the mongorouter:
            container_name: mongorouter
            depends_on:
                - mongoconf
            image: mongo
            command: mongos --configdb mongorsconf/mongoconf:${MONGO_CONFIG_PORT:-27017} --port ${MONGO_ROUTER_PORT:-27017} --bind_ip_all
            restart: on-failure
            expose:
                - "${MONGO_ROUTER_PORT:-27017}"
            ports:
                - ${MONGO_ROUTER_PORT:-27017}:${MONGO_ROUTER_PORT:-27017}
            environment:
                TERM: bash
                TZ: ${TIMEZONE}

and this is my setup.sh:

#!/bin/bash

docker-compose up -d
seconds=3

echo "Executing needed commands on MongoConf, MongoShard1, MongoShard2"
sleep $seconds

cmd="echo 'rs.initiate({_id: "mongorsconf", configsvr: true, members: [{ _id : 0, host : "mongoconf" }]})' | mongo"
docker exec -it mongoconf bash -c $cmd

cmd="echo 'rs.initiate({_id : "mongors1", members: [{ _id : 0, host : "mongoshard1" }]})' | mongo"
docker exec -it mongoshard1 bash -c  $cmd

cmd="echo 'rs.initiate({_id : "mongors2", members: [{ _id : 0, host : "mongoshard2" }]})' | mongo"
docker exec -it mongoshard2 bash -c  $cmd

echo "Done"

echo "Adding shards to MongoRouter"
sleep $seconds

cmd="echo 'sh.addShard("mongors1/mongoshard1")' | mongo"
docker exec -it mongorouter bash -c $cmd

cmd="echo 'sh.addShard("mongors2/mongoshard2")' | mongo"
docker exec -it mongorouter bash -c $cmd

When I try to connect to my MongoDB router, I receive a connection error. I tried to connect through MongoDBCompass using localhost:27017 and using MongoClient on Python too. All the server are "running" on Docker. I can't a solution for this problem, I lost like two days over it.

After the comment, I leave also this part of the code (I think is not important):

# MariaDB container
    mariadb:
        container_name: mariadb
        image: mariadb
        restart: on-failure
        environment:
            MYSQL_ROOT_PASSWORD: ${MARIADB_ROOT_PASS:-rootpass}
        ports:
            - ${MARIADB_PORT:-3306}:${MARIADB_PORT:-3306}
        volumes:
            - mariadb_volume:/var/lib/mysql

    # MISCELLANEOUS SERVICES
    # Adminer (phpMyAdmin alternative) container
    adminer:
        container_name: adminer
        image: adminer
        restart: on-failure
        environment:
            ADMINER_DEFAULT_SERVER: mariadb
            ADMINER_DESIGN: galkaev
        ports:
            - ${ADMINER_PORT:-8080}:${ADMINER_PORT:-8080}
0 Answers
Related