Unable to connect to replica set running within Docker container
diegosasw opened this issue · 1 comments
Versions
- NodeJS: 18
- mongodb-memory-server-*: 9.0.1
- mongodb(the binary version): ?
- mongodb(the js package): 6.1.0
- system: Linux / Docker
package: mongo-memory-server
What is your question?
When creating the 1 node replica set with the node application I can connect properly.
I have dockerized it and, it spins up the container, but my MongoDB Client (Robo 3T) is unable to connect. It times out
I have configured it to bing all IP addresses
import { MongoMemoryReplSet } from "mongodb-memory-server";
// This will create an new instance of "MongoMemoryReplSet" and automatically start all Servers
const replset = await MongoMemoryReplSet.create({
instanceOpts: [
{
port: 27017,
ip: `::,0.0.0.0`,
storageEngine: "wiredTiger"
}
// each entry will result in a MongoMemoryServer (replSet.count will not count towards here)
],
replSet: {
name: "rs",
count: 1,
storageEngine: "wiredTiger" // by default was ephermeralForTest
}
});
console.log("Replica set is running...");
const uri = replset.getUri();
console.log(`Connect using: ${uri}`);
// The ReplSet can be stopped again with
//await replset.stop();
// Listen for termination signals
process.on("SIGINT", gracefulShutdown);
process.on("SIGTERM", gracefulShutdown);
function gracefulShutdown() {
console.log("\nReceived shutdown signal. Stopping replica set...");
replset.stop().then(() => {
console.log("Replica set stopped. Exiting...");
process.exit(0);
});
}
But, for some reason, from my OS (Windows) I can sping up the docker container, I can see that the MongoDB is running inside properly but I can't connect from outside.
It can be reproduced here at this public repository: https://gitlab.com/sunnyatticsoftware/mongodb-rs/-/tree/8740a5146ad19bb8a1386f2ed2d883c6a20818cc
Spin up the docker container with this
docker run --name mongodbrs -p 27017:27017 registry.gitlab.com/sunnyatticsoftware/mongodb-rs
And the MongoDB replicaset will run with connection string mongodb://127.0.0.1:27017/?replicaSet=rs
Timed out after 30000 ms while waiting for a server that matches com.mongodb.client.internal.MongoClientDelegate$1@5ffb8bd6. Client view of cluster state is {type=REPLICA_SET, servers=[{address=127.0.0.1:27017, type=UNKNOWN, state=CONNECTING, exception={com.mongodb.MongoSocketReadException: Prematurely reached end of stream}}]
Inside the container, I can see mongo is up and running, as I can install mongosh and do the following
# mongosh --host localhost --port 27017
Current Mongosh Log ID: 652ea8f840f790f5d361ca6d
Connecting to: mongodb://localhost:27017/?directConnection=true&serverSelectionTimeoutMS=2000
Using MongoDB: 6.0.9
Using Mongosh Beta: 0.12.1
For mongosh info see: https://docs.mongodb.com/mongodb-shell/
To help improve our products, anonymous usage data is collected and sent to MongoDB periodically (https://www.mongodb.com/legal/privacy-policy).
You can opt-out by running the disableTelemetry() command.
------
The server generated these startup warnings when booting:
2023-10-17T15:09:25.955+00:00: You are running this process as the root user, which is not recommended
2023-10-17T15:09:25.956+00:00: /sys/kernel/mm/transparent_hugepage/enabled is 'always'. We suggest setting it to 'never'
2023-10-17T15:09:25.956+00:00: vm.max_map_count is too low
------
rs [direct: primary]>
I can also check the status
rs [direct: primary]> db.serverStatus()
...
host: '3fb2dd3f9ea2',
version: '6.0.9',
process: 'mongod-x64-debian-6.0.9',
pid: 18,
uptime: 1787,
uptimeMillis: 1787659,
uptimeEstimate: 1787,
localTime: 2023-10-17T15:39:12.845Z,
...
Any help would be appreciated.
False alarm, I had made a mistake with ip
configuration. It's connecting properly with IP binding to 0.0.0.0
https://gitlab.com/sunnyatticsoftware/mongodb-rs/-/tree/05af30bec429aa8fd0e93b3874819c6572fb28d8