I have docker deployed on mac os (Apple M3 Pro). I am running a spring boot application from a local host. However, it is not possible to connect to the Replica Set.
2024-11-19T21:46:50.470+03:00 DEBUG 57401 --- [}-mongod3:27017] .mongodb.driver.connection : Connection pool ready for mongod3:27017 2024-11-19T21:46:50.470+03:00 INFO 57401 --- [}-mongod3:27017] .mongodb.driver.cluster : Adding discovered server mongod2:27017 to client view of cluster 2024-11-19T21:46:50.470+03:00 DEBUG 57401 --- [199052-thread-1] .mongodb.driver.connection : Connection created: address=mongod3:27017, driver-generated ID=298664 2024-11-19T21:46:50.470+03:00 DEBUG 57401 --- [}-mongod3:27017] .mongodb.driver.connection : Connection pool created for mongod2:27017 using options maxIdleTimeMS=0, minPoolSize=5, maxPoolSize=100, maxConnecting=2, waitQueueTimeoutMS=120000 2024-11-19T21:46:50.471+03:00 INFO 57401 --- [}-mongod3:27017] .mongodb.driver.cluster : Canonical address mongod1:27017 does not match server address. Removing mongod3:27017 from client view of cluster 2024-11-19T21:46:50.471+03:00 DEBUG 57401 --- [}-mongod3:27017] .mongodb.driver.connection : Connection pool closed for mongod3:27017 2024-11-19T21:46:50.471+03:00 DEBUG 57401 --- [199052-thread-1] .mongodb.driver.connection : Connection closed: address=mongod3:27017, driver-generated ID=298664. Reason: An error occurred while using the connection. Error: There was a socket exception raised by this connection 2024-11-19T21:46:50.469+03:00 INFO 57401 --- [}-mongod2:27017] .mongodb.driver.cluster : Exception in monitor thread while connecting to server mongod2:27017
However, nodes from the local host are available :
nc -zv mongod1 27017
Connection to mongod1 port 27017 [tcp/*] succeeded!
nc -zv mongod2 27018
Connection to mongod2 port 27018 [tcp/*] succeeded!
nc -zv mongod2 27019
Connection to mongod2 port 27019 [tcp/*] succeeded!
- docker
version: '3.8'
services:
mongod1:
image: mongo:latest
container_name: mongod1
hostname: mongod1
ports:
- "27017:27017"
environment:
MONGO_INITDB_ROOT_USERNAME: root
MONGO_INITDB_ROOT_PASSWORD: root
MONGO_INITDB_REPLICA_SET_NAME: rs0
volumes:
- ./mongo-keyfile:/data/replica.key:rw
- mongod1-data:/data/db
command: mongod --bind_ip_all --replSet rs0 --keyFile /data/replica.key --auth
networks:
- mongo-net
mongod2:
image: mongo:latest
container_name: mongod2
hostname: mongod2
ports:
- "27018:27017"
environment:
MONGO_INITDB_REPLICA_SET_NAME: rs0
volumes:
- ./mongo-keyfile:/data/replica.key:rw
- mongod2-data:/data/db
command: mongod --bind_ip_all --replSet rs0 --keyFile /data/replica.key --auth
networks:
- mongo-net
mongod3:
image: mongo:latest
container_name: mongod3
hostname: mongod3
ports:
- "27019:27017"
environment:
MONGO_INITDB_REPLICA_SET_NAME: rs0
volumes:
- ./mongo-keyfile:/data/replica.key:rw
- mongod3-data:/data/db
command: mongod --bind_ip_all --replSet rs0 --keyFile /data/replica.key --auth
networks:
- mongo-net
mongo-init:
image: mongo:latest
container_name: mongo-init
depends_on:
- mongod1
- mongod2
- mongod3
volumes:
- ./init-replica.sh:/init-replica.sh:rw
- ./mongo-keyfile:/data/replica.key:rw
entrypoint: ["bash", "/init-replica.sh"]
networks:
- mongo-net
mongo-express:
image: mongo-express:latest
container_name: mongo-express
environment:
ME_CONFIG_MONGODB_ADMINUSERNAME: root
ME_CONFIG_MONGODB_ADMINPASSWORD: root
ME_CONFIG_MONGODB_URL: "mongodb://root:root@mongod1:27017,mongod2:27017,mongod3:27017/admin?replicaSet=rs0"
ME_CONFIG_MONGODB_ENABLE_ADMIN: "true"
ME_CONFIG_SITE_USERNAME: admin
ME_CONFIG_SITE_PASSWORD: pass
ports:
- "8081:8081"
depends_on:
- mongo-init
networks:
- mongo-net
volumes:
mongod1-data:
mongod2-data:
mongod3-data:
networks:
mongo-net:
driver: bridge
- configuration
@Configuration
@RequiredArgsConstructor
@EnableConfigurationProperties(MongoProperties.class)
@EnableReactiveMongoRepositories(basePackages = "com.example.demo.repository")
public class MongoConfig extends AbstractReactiveMongoConfiguration {
private final MongoProperties mongoProperties;
@Override
protected String getDatabaseName() {
return mongoProperties.getDatabase();
}
@Override
public com.mongodb.reactivestreams.client.MongoClient reactiveMongoClient() {
String mongoUri = mongoProperties.getUri();
return com.mongodb.reactivestreams.client.MongoClients.create(mongoUri);
}
@Bean
public ReactiveMongoTemplate reactiveMongoTemplate() {
return new ReactiveMongoTemplate(reactiveMongoClient(), getDatabaseName());
}
@Bean
public ReactiveMongoTransactionManager transactionManager(ReactiveMongoDatabaseFactory factory) {
return new ReactiveMongoTransactionManager(factory);
}
}
- properties
spring:
autoconfigure:
exclude:
- .springframework.boot.autoconfigure.mongo.embedded.EmbeddedMongoAutoConfiguration
data:
mongodb:
database: accounts
username: root
password: root
authentication-database: admin
uri: mongodb://root:root@mongod1:27017,mongod2:27018,mongod3:27019/accounts?authSource=admin&replicaSet=rs0&maxPoolSize=100&minPoolSize=5&retryWrites=true&w=majority&readPreference=primaryPreferred
Does anyone have any idea what's wrong and how to fix it?
I have docker deployed on mac os (Apple M3 Pro). I am running a spring boot application from a local host. However, it is not possible to connect to the Replica Set.
2024-11-19T21:46:50.470+03:00 DEBUG 57401 --- [}-mongod3:27017] .mongodb.driver.connection : Connection pool ready for mongod3:27017 2024-11-19T21:46:50.470+03:00 INFO 57401 --- [}-mongod3:27017] .mongodb.driver.cluster : Adding discovered server mongod2:27017 to client view of cluster 2024-11-19T21:46:50.470+03:00 DEBUG 57401 --- [199052-thread-1] .mongodb.driver.connection : Connection created: address=mongod3:27017, driver-generated ID=298664 2024-11-19T21:46:50.470+03:00 DEBUG 57401 --- [}-mongod3:27017] .mongodb.driver.connection : Connection pool created for mongod2:27017 using options maxIdleTimeMS=0, minPoolSize=5, maxPoolSize=100, maxConnecting=2, waitQueueTimeoutMS=120000 2024-11-19T21:46:50.471+03:00 INFO 57401 --- [}-mongod3:27017] .mongodb.driver.cluster : Canonical address mongod1:27017 does not match server address. Removing mongod3:27017 from client view of cluster 2024-11-19T21:46:50.471+03:00 DEBUG 57401 --- [}-mongod3:27017] .mongodb.driver.connection : Connection pool closed for mongod3:27017 2024-11-19T21:46:50.471+03:00 DEBUG 57401 --- [199052-thread-1] .mongodb.driver.connection : Connection closed: address=mongod3:27017, driver-generated ID=298664. Reason: An error occurred while using the connection. Error: There was a socket exception raised by this connection 2024-11-19T21:46:50.469+03:00 INFO 57401 --- [}-mongod2:27017] .mongodb.driver.cluster : Exception in monitor thread while connecting to server mongod2:27017
However, nodes from the local host are available :
nc -zv mongod1 27017
Connection to mongod1 port 27017 [tcp/*] succeeded!
nc -zv mongod2 27018
Connection to mongod2 port 27018 [tcp/*] succeeded!
nc -zv mongod2 27019
Connection to mongod2 port 27019 [tcp/*] succeeded!
- docker
version: '3.8'
services:
mongod1:
image: mongo:latest
container_name: mongod1
hostname: mongod1
ports:
- "27017:27017"
environment:
MONGO_INITDB_ROOT_USERNAME: root
MONGO_INITDB_ROOT_PASSWORD: root
MONGO_INITDB_REPLICA_SET_NAME: rs0
volumes:
- ./mongo-keyfile:/data/replica.key:rw
- mongod1-data:/data/db
command: mongod --bind_ip_all --replSet rs0 --keyFile /data/replica.key --auth
networks:
- mongo-net
mongod2:
image: mongo:latest
container_name: mongod2
hostname: mongod2
ports:
- "27018:27017"
environment:
MONGO_INITDB_REPLICA_SET_NAME: rs0
volumes:
- ./mongo-keyfile:/data/replica.key:rw
- mongod2-data:/data/db
command: mongod --bind_ip_all --replSet rs0 --keyFile /data/replica.key --auth
networks:
- mongo-net
mongod3:
image: mongo:latest
container_name: mongod3
hostname: mongod3
ports:
- "27019:27017"
environment:
MONGO_INITDB_REPLICA_SET_NAME: rs0
volumes:
- ./mongo-keyfile:/data/replica.key:rw
- mongod3-data:/data/db
command: mongod --bind_ip_all --replSet rs0 --keyFile /data/replica.key --auth
networks:
- mongo-net
mongo-init:
image: mongo:latest
container_name: mongo-init
depends_on:
- mongod1
- mongod2
- mongod3
volumes:
- ./init-replica.sh:/init-replica.sh:rw
- ./mongo-keyfile:/data/replica.key:rw
entrypoint: ["bash", "/init-replica.sh"]
networks:
- mongo-net
mongo-express:
image: mongo-express:latest
container_name: mongo-express
environment:
ME_CONFIG_MONGODB_ADMINUSERNAME: root
ME_CONFIG_MONGODB_ADMINPASSWORD: root
ME_CONFIG_MONGODB_URL: "mongodb://root:root@mongod1:27017,mongod2:27017,mongod3:27017/admin?replicaSet=rs0"
ME_CONFIG_MONGODB_ENABLE_ADMIN: "true"
ME_CONFIG_SITE_USERNAME: admin
ME_CONFIG_SITE_PASSWORD: pass
ports:
- "8081:8081"
depends_on:
- mongo-init
networks:
- mongo-net
volumes:
mongod1-data:
mongod2-data:
mongod3-data:
networks:
mongo-net:
driver: bridge
- configuration
@Configuration
@RequiredArgsConstructor
@EnableConfigurationProperties(MongoProperties.class)
@EnableReactiveMongoRepositories(basePackages = "com.example.demo.repository")
public class MongoConfig extends AbstractReactiveMongoConfiguration {
private final MongoProperties mongoProperties;
@Override
protected String getDatabaseName() {
return mongoProperties.getDatabase();
}
@Override
public com.mongodb.reactivestreams.client.MongoClient reactiveMongoClient() {
String mongoUri = mongoProperties.getUri();
return com.mongodb.reactivestreams.client.MongoClients.create(mongoUri);
}
@Bean
public ReactiveMongoTemplate reactiveMongoTemplate() {
return new ReactiveMongoTemplate(reactiveMongoClient(), getDatabaseName());
}
@Bean
public ReactiveMongoTransactionManager transactionManager(ReactiveMongoDatabaseFactory factory) {
return new ReactiveMongoTransactionManager(factory);
}
}
- properties
spring:
autoconfigure:
exclude:
- .springframework.boot.autoconfigure.mongo.embedded.EmbeddedMongoAutoConfiguration
data:
mongodb:
database: accounts
username: root
password: root
authentication-database: admin
uri: mongodb://root:root@mongod1:27017,mongod2:27018,mongod3:27019/accounts?authSource=admin&replicaSet=rs0&maxPoolSize=100&minPoolSize=5&retryWrites=true&w=majority&readPreference=primaryPreferred
Does anyone have any idea what's wrong and how to fix it?
Share edited Nov 19, 2024 at 19:12 skyho asked Nov 19, 2024 at 19:01 skyhoskyho 1,9037 gold badges32 silver badges75 bronze badges1 Answer
Reset to default 0As a solution, we had to use osdfs (Legacy)