docker-library / mongo

Docker Official Image packaging for MongoDB
https://www.mongodb.org/
Apache License 2.0
1.03k stars 619 forks source link

Not connecting in the mongodb compass - getaddrinfo ENOTFOUND db-mongo-node17 #674

Closed gulskr closed 6 months ago

gulskr commented 6 months ago

When i am trying run using the docker-compose.yml version 5.0.24 and I am doing all this in a ec2 server AWS

version: "3.0"  # Update the version to "3.0" as per your requirement

volumes:
  db-mongo-keys26:
  db-mongo-data-26:
  db-mongo-data-27:
  db-mongo-data-28:

networks:
  db-cluster26:
    driver: bridge
    ipam:
      driver: default
      config:
        - subnet: 162.10.21.0/24

services:

  db-mongo-keys26:
    image: depop/openssl-bats
    volumes:
      - db-mongo-keys26:/mongo-conf
    command: 'bash -c "openssl rand -base64 741 > /mongo-conf/mongodb-keyfile; chmod 600 /mongo-conf/mongodb-keyfile; chown 999 /mongo-conf/mongodb-keyfile"'

  # Node1
  db-mongo-node17:
    container_name: db-mongo-node17
    image: mongo:5.0.24  # Update the MongoDB version to "5.0.24"
    volumes:
      - db-mongo-keys26:/opt/keyfile
      - db-mongo-data-26:/data/db
    env_file:
      ./mongod.env
    ports:
      - 27017:27017  # Change the host port to 27017
    command: 'mongod --auth --keyFile /opt/keyfile/mongodb-keyfile --replSet db-ppd'
    depends_on:
        - db-mongo-keys26
    networks:
      db-cluster26:

  # Node2
  db-mongo-node18:
    container_name: db-mongo-node18
    image: mongo:5.0.24
    volumes:
      - db-mongo-keys26:/opt/keyfile
      - db-mongo-data-27:/data/db
    env_file:
      ./mongod.env
    ports:
      - 27018:27017  # Change the host port to 27018
    command: 'mongod --auth --keyFile /opt/keyfile/mongodb-keyfile --replSet db-ppd'
    depends_on:
        - db-mongo-keys26
    networks:
      db-cluster26:

  # Node3
  db-mongo-node19:
    container_name: db-mongo-node19
    image: mongo:5.0.24
    volumes:
      - db-mongo-keys26:/opt/keyfile
      - db-mongo-data-28:/data/db
    env_file:
      ./mongod.env
    ports:
      - 27019:27017  # Change the host port to 27019
    command: 'mongod --auth --keyFile /opt/keyfile/mongodb-keyfile --replSet db-ppd'
    depends_on:
        - db-mongo-keys26
    networks:
      db-cluster26:

This is to initiate the replica set

rs.initiate({
_id: "db-ppd",
   members: [
     {_id: 0, host: "db-mongo-node17:27017"},
     {_id: 1, host: "db-mongo-node18:27017"},
     {_id: 2, host: "db-mongo-node19:27017"}
   ]
 })

And i have created a root user and trying to connect into my mongodb compass like this and this doesn't work it give an error - getaddrinfo ENOTFOUND db-mongo-node17 mongodb://root:*****@host_address:27017,host_address:27018,host_address:27018/?replicaSet=db-ppd

But when i try like this - it show me the db and work fine mongodb://root:root@host_address:27017/?directConnection=true

I have no idea why this doesn't work when i don't try with the direct connection If you need the rs.status , if it helps here it is

db-ppd:PRIMARY> rs.status()
{
        "set" : "db-ppd",
        "date" : ISODate("2024-02-26T12:55:41.236Z"),
        "myState" : 1,
        "term" : NumberLong(8),
        "syncSourceHost" : "",
        "syncSourceId" : -1,
        "heartbeatIntervalMillis" : NumberLong(2000),
        "majorityVoteCount" : 2,
        "writeMajorityCount" : 2,
        "votingMembersCount" : 3,
        "writableVotingMembersCount" : 3,
        "optimes" : {
                "lastCommittedOpTime" : {
                        "ts" : Timestamp(1708952138, 1),
                        "t" : NumberLong(8)
                },
                "lastCommittedWallTime" : ISODate("2024-02-26T12:55:38.624Z"),
                "readConcernMajorityOpTime" : {
                        "ts" : Timestamp(1708952138, 1),
                        "t" : NumberLong(8)
                },
                "appliedOpTime" : {
                        "ts" : Timestamp(1708952138, 1),
                        "t" : NumberLong(8)
                },
                "durableOpTime" : {
                        "ts" : Timestamp(1708952138, 1),
                        "t" : NumberLong(8)
                },
                "lastAppliedWallTime" : ISODate("2024-02-26T12:55:38.624Z"),
                "lastDurableWallTime" : ISODate("2024-02-26T12:55:38.624Z")
        },
        "lastStableRecoveryTimestamp" : Timestamp(1708952118, 1),
        "electionCandidateMetrics" : {
                "lastElectionReason" : "electionTimeout",
                "lastElectionDate" : ISODate("2024-02-26T11:41:28.430Z"),
                "electionTerm" : NumberLong(8),
                "lastCommittedOpTimeAtElection" : {
                        "ts" : Timestamp(0, 0),
                        "t" : NumberLong(-1)
                },
                "lastSeenOpTimeAtElection" : {
                        "ts" : Timestamp(1708947657, 1),
                        "t" : NumberLong(6)
                },
                "numVotesNeeded" : 2,
                "priorityAtElection" : 1,
                "electionTimeoutMillis" : NumberLong(10000),
                "numCatchUpOps" : NumberLong(0),
                "newTermStartDate" : ISODate("2024-02-26T11:41:28.443Z"),
                "wMajorityWriteAvailabilityDate" : ISODate("2024-02-26T11:41:28.752Z")
        },
        "members" : [
                {
                        "_id" : 0,
                        "name" : "db-mongo-node17:27017",
                        "health" : 1,
                        "state" : 2,
                        "stateStr" : "SECONDARY",
                        "uptime" : 4463,
                        "optime" : {
                                "ts" : Timestamp(1708952138, 1),
                                "t" : NumberLong(8)
                        },
                        "optimeDurable" : {
                                "ts" : Timestamp(1708952138, 1),
                                "t" : NumberLong(8)
                        },
                        "optimeDate" : ISODate("2024-02-26T12:55:38Z"),
                        "optimeDurableDate" : ISODate("2024-02-26T12:55:38Z"),
                        "lastAppliedWallTime" : ISODate("2024-02-26T12:55:38.624Z"),
                        "lastDurableWallTime" : ISODate("2024-02-26T12:55:38.624Z"),
                        "lastHeartbeat" : ISODate("2024-02-26T12:55:40.928Z"),
                        "lastHeartbeatRecv" : ISODate("2024-02-26T12:55:39.567Z"),
                        "pingMs" : NumberLong(0),
                        "lastHeartbeatMessage" : "",
                        "syncSourceHost" : "db-mongo-node19:27017",
                        "syncSourceId" : 2,
                        "infoMessage" : "",
                        "configVersion" : 1,
                        "configTerm" : 8
                },
                {
                        "_id" : 1,
                        "name" : "db-mongo-node18:27017",
                        "health" : 1,
                        "state" : 2,
                        "stateStr" : "SECONDARY",
                        "uptime" : 4462,
                        "optime" : {
                                "ts" : Timestamp(1708952138, 1),
                                "t" : NumberLong(8)
                        },
                        "optimeDurable" : {
                                "ts" : Timestamp(1708952138, 1),
                                "t" : NumberLong(8)
                        },
                        "optimeDate" : ISODate("2024-02-26T12:55:38Z"),
                        "optimeDurableDate" : ISODate("2024-02-26T12:55:38Z"),
                        "lastAppliedWallTime" : ISODate("2024-02-26T12:55:38.624Z"),
                        "lastDurableWallTime" : ISODate("2024-02-26T12:55:38.624Z"),
                        "lastHeartbeat" : ISODate("2024-02-26T12:55:40.929Z"),
                        "lastHeartbeatRecv" : ISODate("2024-02-26T12:55:39.956Z"),
                        "pingMs" : NumberLong(0),
                        "lastHeartbeatMessage" : "",
                        "syncSourceHost" : "db-mongo-node19:27017",
                        "syncSourceId" : 2,
                        "infoMessage" : "",
                        "configVersion" : 1,
                        "configTerm" : 8
                },
                {
                        "_id" : 2,
                        "name" : "db-mongo-node19:27017",
                        "health" : 1,
                        "state" : 1,
                        "stateStr" : "PRIMARY",
                        "uptime" : 4465,
                        "optime" : {
                                "ts" : Timestamp(1708952138, 1),
                                "t" : NumberLong(8)
                        },
                        "optimeDate" : ISODate("2024-02-26T12:55:38Z"),
                        "lastAppliedWallTime" : ISODate("2024-02-26T12:55:38.624Z"),
                        "lastDurableWallTime" : ISODate("2024-02-26T12:55:38.624Z"),
                        "syncSourceHost" : "",
                        "syncSourceId" : -1,
                        "infoMessage" : "",
                        "electionTime" : Timestamp(1708947688, 1),
                        "electionDate" : ISODate("2024-02-26T11:41:28Z"),
                        "configVersion" : 1,
                        "configTerm" : 8,
                        "self" : true,
                        "lastHeartbeatMessage" : ""
                }
        ],
        "ok" : 1,
        "$clusterTime" : {
                "clusterTime" : Timestamp(1708952138, 1),
                "signature" : {
                        "hash" : BinData(0,"zl2L6hBW70Cr5140qnwfseqG0fA="),
                        "keyId" : NumberLong("7339807892901462020")
                }
        },
        "operationTime" : Timestamp(1708952138, 1)
}

If anyone can help, it will be very much appreciated

LaurentGoderre commented 6 months ago

Connecting to the replicaset works from within the network. It seems to be an issue when connecting from outside.

LaurentGoderre commented 6 months ago

There are a few ways you could get around this problem.

1) Implement a reverse proxy using nginx or similar. 2) Add explicit ip addresses, change the ports mapping in the container and add the hosts to your hostfile,.

LaurentGoderre commented 6 months ago

The following worked for me

compose

version: "3.0"  # Update the version to "3.0" as per your requirement

volumes:
  db-mongo-keys26:
  db-mongo-data-26:
  db-mongo-data-27:
  db-mongo-data-28:

networks:
  db-cluster26:
    driver: bridge
    ipam:
      driver: default
      config:
        - subnet: 162.10.21.0/24

services:

  db-mongo-keys26:
    image: depop/openssl-bats
    volumes:
      - db-mongo-keys26:/mongo-conf
    command: 'bash -c "openssl rand -base64 741 > /mongo-conf/mongodb-keyfile; chmod 600 /mongo-conf/mongodb-keyfile; chown 999 /mongo-conf/mongodb-keyfile"'

  # Node1
  db-mongo-node17:
    container_name: db-mongo-node17
    image: mongo:5.0.24  # Update the MongoDB version to "5.0.24"
    volumes:
      - db-mongo-keys26:/opt/keyfile
      - db-mongo-data-26:/data/db
    env_file:
      ./mongod.env
    ports:
      - 27017:27017  # Change the host port to 27017
    command: 'mongod --auth --keyFile /opt/keyfile/mongodb-keyfile --replSet db-ppd'
    depends_on:
        - db-mongo-keys26

  # Node2
  db-mongo-node18:
    container_name: db-mongo-node18
    image: mongo:5.0.24
    volumes:
      - db-mongo-keys26:/opt/keyfile
      - db-mongo-data-27:/data/db
    env_file:
      ./mongod.env
    ports:
      - 27018:27018  # Change the host port to 27018
    command: 'mongod --port 27018 --auth --keyFile /opt/keyfile/mongodb-keyfile --replSet db-ppd'
    depends_on:
        - db-mongo-keys26

  # Node3
  db-mongo-node19:
    container_name: db-mongo-node19
    image: mongo:5.0.24
    volumes:
      - db-mongo-keys26:/opt/keyfile
      - db-mongo-data-28:/data/db
    env_file:
      ./mongod.env
    ports:
      - 27019:27019  # Change the host port to 27019
    command: 'mongod --port 27019 --auth --keyFile /opt/keyfile/mongodb-keyfile --replSet db-ppd'
    depends_on:
        - db-mongo-keys26

Command:

rs.initiate({
_id: "db-ppd",
   members: [
     {_id: 0, host: "db-mongo-node17:27017"},
     {_id: 1, host: "db-mongo-node18:27018"},
     {_id: 2, host: "db-mongo-node19:27019"}
   ]
 })

Host file on host

127.0.0.1       db-mongo-node17
127.0.0.1       db-mongo-node18
127.0.0.1       db-mongo-node19

Connection string:

mongodb://root:example@db-mongo-node17:27017,db-mongo-node18:27018,db-mongo-node19:27019/?replicaSet=db-ppd
gulskr commented 6 months ago

@LaurentGoderre are you working on your local system or some clous because the same thing i am trying on my aws ec2, it is giving error WARNING: Some networks were defined but are not used by any service: db-cluster26 Creating network "ec2-user_default" with the default driver Creating volume "ec2-user_db-mongo-keys26" with default driver Creating volume "ec2-user_db-mongo-data-26" with default driver Creating volume "ec2-user_db-mongo-data-27" with default driver Creating volume "ec2-user_db-mongo-data-28" with default driver Creating ec2-user_db-mongo-keys26_1 ... done Creating db-mongo-node19 ... Creating db-mongo-node17 ... error Creating db-mongo-node18 ...

Creating db-mongo-node19 ... done de17 (07973999b06c76bc04444a43530a0aff03a9dbc623e9ac18dd2019e7f5748f63): Error starting userland proxy: listen tcp4 0.0.0.0:27017: bind: Creating db-mongo-node18 ... done

ERROR: for db-mongo-node17 Cannot start service db-mongo-node17: driver failed programming external connectivity on endpoint db-mongo-node17 (07973999b06c76bc04444a43530a0aff03a9dbc623e9ac18dd2019e7f5748f63): Error starting userland proxy: listen tcp4 0.0.0.0:27017: bind: address already in use ERROR: Encountered errors while bringing up the project. [ec2-user@ip-12-1-27-125 ~]$ docker exec -it db-mongo-node18 bash root@5252644ac2d7:/# mongo MongoDB shell version v5.0.24 connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb Error: couldn't connect to server 127.0.0.1:27017, connection attempt failed: SocketException: Error connecting to 127.0.0.1:27017 :: caused by :: Connection refused : connect@src/mongo/shell/mongo.js:372:17 @(connect):2:6 exception: connect failed

gulskr commented 6 months ago

If you have any reference to install it with full setup with docker-compose or something, It will be very helpful on Amazon linux2, 5.0.24

LaurentGoderre commented 6 months ago

This was on a local setup. Maybe you can use all non-default ports to avoid port in use error (27018, 27019, 27020)