0

I am trying to run mongo and connected mongo-express defined in a following docker-compose.yml:

version: '3.8'

services:
  mongo1:
    image: mongo:6.0.4
    container_name: mongo1
    restart: always
    depends_on:
      - mongo2
      - mongo3
    links:
      - mongo2
      - mongo3
    ports:
      - '27017:27017'
      - '27018:27017'
    networks:
      - mongo-network
    volumes:
      - mongodb_rs_1_data:/data/db
      - mongodb_rs_1_config:/data/configdb
      - ./replicaSetSecurity.key:/data/replicaSetSecurity.key
      - ./scripts/rs-init.sh:/scripts/rs-init.sh
    environment:
      MONGO_INITDB_ROOT_USERNAME: ${MONGO_USERNAME}
      MONGO_INITDB_ROOT_PASSWORD: ${MONGO_PASSWORD}
    entrypoint:
      - bash
      - -c
      - |
        chmod 400 /data/replicaSetSecurity.key
        chown 999:999 /data/replicaSetSecurity.key
        chmod +x /scripts/rs-init.sh
        exec docker-entrypoint.sh $$@
    command: "mongod --bind_ip_all --replSet replicaSetConfig --keyFile /data/replicaSetSecurity.key"

  mongo2:
    image: mongo:6.0.4
    container_name: mongo2
    restart: always
    ports:
      - '27019:27017'
    networks:
      - mongo-network
    volumes:
      - mongodb_rs_2_data:/data/db
      - mongodb_rs_2_config:/data/configdb
      - ./replicaSetSecurity.key:/data/replicaSetSecurity.key
    environment:
      MONGO_INITDB_ROOT_USERNAME: ${MONGO_USERNAME}
      MONGO_INITDB_ROOT_PASSWORD: ${MONGO_PASSWORD}
    entrypoint:
      - bash
      - -c
      - |
        chmod 400 /data/replicaSetSecurity.key
        chown 999:999 /data/replicaSetSecurity.key
        exec docker-entrypoint.sh $$@
    command: "mongod --bind_ip_all --replSet replicaSetConfig --keyFile /data/replicaSetSecurity.key"

  mongo3:
    image: mongo:6.0.4
    container_name: mongo3
    ports:
      - '27020:27017'
    networks:
      - mongo-network
    volumes:
      - mongodb_rs_3_data:/data/db
      - mongodb_rs_3_config:/data/configdb
      - ./replicaSetSecurity.key:/data/replicaSetSecurity.key
    environment:
      MONGO_INITDB_ROOT_USERNAME: ${MONGO_USERNAME}
      MONGO_INITDB_ROOT_PASSWORD: ${MONGO_PASSWORD}
    entrypoint:
      - bash
      - -c
      - |
        chmod 400 /data/replicaSetSecurity.key
        chown 999:999 /data/replicaSetSecurity.key
        exec docker-entrypoint.sh $$@
    command: "mongod --bind_ip_all --replSet replicaSetConfig --keyFile /data/replicaSetSecurity.key"

  mongo-express-1:
    image: mongo-express:1.0.0-alpha
    container_name: mongo-express-1
    depends_on:
      - mongo1
    restart: always
    ports:
      - '8081:8081'
    environment:
      ME_CONFIG_MONGODB_URL: mongodb://${MONGO_USERNAME}:${MONGO_PASSWORD}@mongo1:27017/?replicaSet=replicaSetConfig&authSource=admin

  mongo-express-2:
    image: mongo-express:1.0.0-alpha
    container_name: mongo-express-2
    depends_on:
      - mongo2
    restart: always
    ports:
      - '8082:8081'
    environment:
      ME_CONFIG_MONGODB_URL: mongodb://${MONGO_USERNAME}:${MONGO_PASSWORD}@mongo2:27017/?readPreference=secondary&authSource=admin

  mongo-express-3:
    image: mongo-express:1.0.0-alpha
    container_name: mongo-express-3
    depends_on:
      - mongo3
    restart: always
    ports:
      - '8083:8081'
    environment:
      ME_CONFIG_MONGODB_URL: mongodb://${MONGO_USERNAME}:${MONGO_PASSWORD}@mongo3:27017/?readPreference=secondary&authSource=admin

networks:
  mongo-network:
    driver: bridge

volumes:
  mongodb_rs_1_data:
  mongodb_rs_1_config:
  mongodb_rs_2_data:
  mongodb_rs_2_config:
  mongodb_rs_3_data:
  mongodb_rs_3_config:

I am running those services via the sh script:

#!/bin/bash

DELAY=10

echo "****** Starting MongoDB and its dependencies ******"

docker-compose up -d

echo "****** Waiting for ${DELAY} seconds for containers to go up ******"

sleep $DELAY

docker exec mongo1 ./scripts/rs-init.sh

echo "****** Successfully started MongoDB and its dependencies ******"

The mentioned rs-init.sh is as follows:

#!/bin/bash

mongosh -u admin -p password --authenticationDatabase admin <<EOF
var config = {
    "_id": "replicaSetConfig",
    "version": 1,
    "members": [
        {
            "_id": 1,
            "host": "mongo1:27017",
            "priority": 3
        },
        {
            "_id": 2,
            "host": "mongo2:27017",
            "priority": 2
        },
        {
            "_id": 3,
            "host": "mongo3:27017",
            "priority": 1
        }
    ]
};
//rs.initiate(config, { force: true });
rs.reconfig(config, {force: true});
rs.status();
EOF

When checking all the mongo-express instances logs in a Docker Desktop I can see following:

Could not connect to database using connectionString: mongodb://admin:password@mongo1:27017/?replicaSet=replicaSetConfig&authSource=admin"
2023-05-07 15:54:27 (node:7) UnhandledPromiseRejectionWarning: MongoNetworkError: failed to connect to server [mongo1:27017] on first connect [Error: getaddrinfo ENOTFOUND mongo1
2023-05-07 15:54:27     at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:66:26) {
2023-05-07 15:54:27   name: 'MongoNetworkError'
2023-05-07 15:54:27 }]
2023-05-07 15:54:27     at Pool.<anonymous> (/node_modules/mongodb/lib/core/topologies/server.js:441:11)
2023-05-07 15:54:27     at Pool.emit (events.js:314:20)
2023-05-07 15:54:27     at /node_modules/mongodb/lib/core/connection/pool.js:564:14
2023-05-07 15:54:27     at /node_modules/mongodb/lib/core/connection/pool.js:1014:9
2023-05-07 15:54:27     at /node_modules/mongodb/lib/core/connection/connect.js:32:7
2023-05-07 15:54:27     at callback (/node_modules/mongodb/lib/core/connection/connect.js:300:5)
2023-05-07 15:54:27     at Socket.<anonymous> (/node_modules/mongodb/lib/core/connection/connect.js:330:7)
2023-05-07 15:54:27     at Object.onceWrapper (events.js:421:26)
2023-05-07 15:54:27     at Socket.emit (events.js:314:20)
2023-05-07 15:54:27     at emitErrorNT (internal/streams/destroy.js:92:8)
2023-05-07 15:54:27     at emitErrorAndCloseNT (internal/streams/destroy.js:60:3)
2023-05-07 15:54:27     at processTicksAndRejections (internal/process/task_queues.js:84:21)

I have tried many changes but without success. As I mentioned I do start container(s) via the mentioned script dbstart.sh.

Do not anyone know, if I am missing anything?

Thank you!

Adam93
  • 13
  • 4
  • Okay, I just solved the issue. There was a problem with a network setup as I am running those services on a local machine. Just removed a network definition and everything is working as expected. – Adam93 May 08 '23 at 14:32

0 Answers0