Can't run SpringBoot application due mongo replica-set connection error

74 Views Asked by At

Docker compose with Mongo replica-set has been run and rs was initialized successfully.

I can connect to each container in standalone mode using mongodb://localhost:27017/db command, but can't do it when use spring.data.mongodb.uri.

spring.data.mongodb.uri: mongodb://localhost:27017,localhost:27018,localhost:27019/asc?replicaSet=rs0

#!/bin/bash

PRIMARY_HOST="mongo-master"
SECONDARY1_HOST="mongo-slave1"
SECONDARY2_HOST="mongo-slave2"
PORT=27017

HIGHEST_PRIORITY=2
STANDARD_PRIORITY=1

echo "Sleeping for 30 seconds with countdown:"
for i in {30..1}; do
  echo "$i seconds remaining..."
  sleep 1
done


# init replica-set
mongosh --host $PRIMARY_HOST:$PORT <<EOF
  rs.initiate({
    _id: "rs0",
    members: [
      { _id: 0, host: "$PRIMARY_HOST:$PORT", priority: $HIGHEST_PRIORITY },
      { _id: 1, host: "$SECONDARY1_HOST:$PORT", priority: $STANDARD_PRIORITY },
      { _id: 2, host: "$SECONDARY2_HOST:$PORT", priority: $STANDARD_PRIORITY }
    ]
  })
EOF

# Check the success of the initialization
if [ $? -eq 0 ]; then
  # Check for the presence of the "errmsg" string in the MongoDB output
  if echo "$result" | grep -q '"errmsg"'; then
    echo "Error initializing replication."
    echo "$result"  # Output details of the error
  else
    echo "Replication successfully initialized."
  fi
else
  EXIT_CODE=$?
  echo "Error initializing replication. Exit code: $EXIT_CODE"
fi

Replica-set has been initialized successfully.

Errors are next during stratup SpringBoot app and connect to it:

application.yaml file:

spring:
data: mongodb: uri: mongodb://localhost:27017,localhost:27018,localhost:27019/asc?replicaSet=rs0

com.mongodb.MongoSocketException: mongo-slave1: nodename nor servname provided, or not known
        at com.mongodb.ServerAddress.getSocketAddresses(ServerAddress.java:221) ~[mongodb-driver-core-4.11.1.jar:na]
        at com.mongodb.internal.connection.ServerAddressWithResolver.getSocketAddresses(ServerAddressWithResolver.java:68) ~[mongodb-driver-core-4.11.1.jar:na]
        at com.mongodb.internal.connection.SocketStream.initializeSocket(SocketStream.java:100) ~[mongodb-driver-core-4.11.1.jar:na]
        at com.mongodb.internal.connection.SocketStream.open(SocketStream.java:78) ~[mongodb-driver-core-4.11.1.jar:na]
        at com.mongodb.internal.connection.InternalStreamConnection.open(InternalStreamConnection.java:211) ~[mongodb-driver-core-4.11.1.jar:na]
        at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitorRunnable.lookupServerDescription(DefaultServerMonitor.java:196) ~[mongodb-driver-core-4.11.1.jar:na]
        at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitorRunnable.run(DefaultServerMonitor.java:156) ~[mongodb-driver-core-4.11.1.jar:na]
        at java.base/java.lang.Thread.run(Thread.java:1583) ~[na:na]
    Caused by: java.net.UnknownHostException: mongo-slave1: nodename nor servname provided, or not known
    
    com.mongodb.MongoSocketException: mongo-master: nodename nor servname provided, or not known
        at com.mongodb.ServerAddress.getSocketAddresses(ServerAddress.java:221) ~[mongodb-driver-core-4.11.1.jar:na]
        at com.mongodb.internal.connection.ServerAddressWithResolver.getSocketAddresses(ServerAddressWithResolver.java:68) ~[mongodb-driver-core-4.11.1.jar:na]
        at com.mongodb.internal.connection.SocketStream.initializeSocket(SocketStream.java:100) ~[mongodb-driver-core-4.11.1.jar:na]
        at com.mongodb.internal.connection.SocketStream.open(SocketStream.java:78) ~[mongodb-driver-core-4.11.1.jar:na]
        at com.mongodb.internal.connection.InternalStreamConnection.open(InternalStreamConnection.java:211) ~[mongodb-driver-core-4.11.1.jar:na]
        at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitorRunnable.lookupServerDescription(DefaultServerMonitor.java:196) ~[mongodb-driver-core-4.11.1.jar:na]
        at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitorRunnable.run(DefaultServerMonitor.java:156) ~[mongodb-driver-core-4.11.1.jar:na]
        at java.base/java.lang.Thread.run(Thread.java:1583) ~[na:na]
    Caused by: java.net.UnknownHostException: mongo-master: nodename nor servname provided, or not known
    
    com.mongodb.MongoSocketException: mongo-slave2
        at com.mongodb.ServerAddress.getSocketAddresses(ServerAddress.java:221) ~[mongodb-driver-core-4.11.1.jar:na]
        at com.mongodb.internal.connection.ServerAddressWithResolver.getSocketAddresses(ServerAddressWithResolver.java:68) ~[mongodb-driver-core-4.11.1.jar:na]
        at com.mongodb.internal.connection.SocketStream.initializeSocket(SocketStream.java:100) ~[mongodb-driver-core-4.11.1.jar:na]
        at com.mongodb.internal.connection.SocketStream.open(SocketStream.java:78) ~[mongodb-driver-core-4.11.1.jar:na]
        at com.mongodb.internal.connection.InternalStreamConnection.open(InternalStreamConnection.java:211) ~[mongodb-driver-core-4.11.1.jar:na]
        at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitorRunnable.lookupServerDescription(DefaultServerMonitor.java:196) ~[mongodb-driver-core-4.11.1.jar:na]
        at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitorRunnable.run(DefaultServerMonitor.java:156) ~[mongodb-driver-core-4.11.1.jar:na]
        at java.base/java.lang.Thread.run(Thread.java:1583) ~[na:na]
    Caused by: java.net.UnknownHostException: mongo-slave2

It looks like driver try to use containers name instead localhost name. How to figure out with that?

0

There are 0 best solutions below