Error when connecting to Mongo DB Hosted in a container - mongodb

Ive installed Docker locally (mac) and tried to run a docker container using the following command.
docker run -it -p 27017:27017 mongoImageId
But when I tried to login in to the container via the mongo terminal client, Im getting the following error.
mongo --port 27017 -u "userName" -p "password" --authenticationDatabase "sampleDBName"
MongoDB shell version v3.6.5
connecting to: mongodb://127.0.0.1:27017/
2018-07-23T13:41:53.423+0530 E QUERY [thread1] Error: network error while attempting to run command 'isMaster' on host '127.0.0.1:27017' :
connect#src/mongo/shell/mongo.js:251:13
#(connect):1:6
exception: connect failed
But if I try to build the same image in an aws ec2 instance, it connects without a hazel. Does any one else also encountered the same issue and was able to find the root cause ?
Ref.
[1] - https://github.com/aashreys/docker-mongo-auth

Related

Unable to access mongodb running in a docker from local machine

I am trying to access the mongodb running in a docker from my local machine however I am seeing this error message:
Error: couldnt connect to server localhost:27017, connection attempt failed: SocketException: Error connecting to localhost:27017 (127.0.0.1:27017) :: caused by :: No connection could be made because the target machine actively refused it.
commands tried to used to access mongo on my local machine:
mongo localhost:27017
mongo 172.17.0.2:27017(container's ip)
command used to run mongodb on docker
docker run -d -p 27017:27017 mongo:latest
Please advice. Thank you.

Connect to Mongo Router inside Docker container from remote host

I have an EC2 instance in AWS with a mongo docker container that init a mongo router such as :
docker run --network mongo-net -p 27051:27017 --expose=27017 -d --name=mongos51 mongo mongos --port 27017 --configdb configserver/configserver41:27017,configserver42:27017 --bind_ip 0.0.0.0
I have opened my SG in AWS to allow any connections and i can reach the public IP on the port 27051 without problems.
My container is in a bidge docker network to allow all of my mongo instances to communicate.
However, if i try to connect to the mongo shell like :
mongosh mongodb://public_ip:27051
I have the error Connection refused instantly. Same if i try to open the mongoshell from inside the container with :
docker exec -it mongos51 bash -c "echo 'sh.addShard(\"shard1/mongodb11\")' | mongosh "
Current Mongosh Log ID: 6149ed68def89bc1907c8988
Connecting to: mongodb://127.0.0.1:27017/?directConnection=true&serverSelectionTimeoutMS=2000
MongoNetworkError: connect ECONNREFUSED 127.0.0.1:27017
I have the same error if i use the private IP instead of 127.0.0.1.
What i am missing here ?
According the documentation try to connect like this :
mongosh --host public_ip --port 27051
It work for me when I follow these steps.

Unable to open Mongo shell using Docker run but exec

What I want to is open mongo shell in terminal.
When I run mongo container using run with mongo command,
I got an error.
$ docker run -it --name mongodb mongo:latest mongo
MongoDB shell version v4.2.1
connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb
2019-12-01T10:01:18.524+0000 E QUERY [js] 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:341:17
#(connect):2:6
2019-12-01T10:01:18.526+0000 F - [main] exception: connect failed
2019-12-01T10:01:18.526+0000 E - [main] exiting with code 1
But when I run mongo first and exec command later, I can open mongo shell nicely.
$ docker run -d --name mongodb mongo:latest
0296856a6e614667ad7cb81cac104d2704369d8d98f9c5dfdc8724dd5c74591a
$ docker exec -it mongodb mongo
MongoDB shell version v4.2.1
connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("02a0086f-35f8-4c8c-a615-9769743b22d4") }
MongoDB server version: 4.2.1
Welcome to the MongoDB shell.
(...)
> show dbs
admin 0.000GB
config 0.000GB
local 0.000GB
Why I can't open mongo shell using single line run command?
I guess that command try to mongo shell start before mongod ready. But I saw few docuements start mongo shell like this. Please let me know why this happend.
When you docker run imagename command, that command runs instead of the normal command the image would run (the CMD from its Dockerfile). When you docker exec containername command, that launches an additional command in the same container. So your docker run example launches the mongo shell instead of running a new database, but by default it tries to connect to a database on localhost, that is, in the same container.
For interacting with databases, my general recommendation would be to install the client tools you need locally and use them directly: run mongo on your host pointing at whatever port you published. You don't need Docker at all (or the root-level privileges it implies) just to make simple client calls. docker exec is in many ways equivalent to ssh'ing as root into the container, and it wouldn't be my preferred path to interacting with a database.
If you do want to docker run a client, you'd have to make it communicate with a server container, using the normal mechanisms for this.
docker network create mongo
docker run -d --net mongo -p 27017:27017 --name mongodb mongo:latest
docker run -it --net mongo mongo:latest \
mongo --host mongodb

Cannot connect to MongoDB running in local Docker container

I have this command to start MongoDB in a container:
docker run -p 27017:27017 --name cdt-mongo mongo
this is from these docs:
https://hub.docker.com/_/mongo/
I actually think the
-p 27017:27017
is superfluous. anyway.
Locally, I run the container in one terminal, and then in another terminal I issue the mongo command, and I get:
$ mongo
MongoDB shell version v3.4.2
connecting to: mongodb://127.0.0.1:27017
2017-05-02T11:27:22.864-0700 W NETWORK [thread1] Failed to connect to 127.0.0.1:27017, in(checking socket for error after poll), reason: Connection refused
2017-05-02T11:27:22.866-0700 E QUERY [thread1] Error: couldn't connect to server 127.0.0.1:27017, connection attempt failed :
connect#src/mongo/shell/mongo.js:237:13
#(connect):1:6
exception: connect failed
anybody know why I cannot connect to mongodb running in the container?
because I am on MacOS, I should not connect to
localhost:27017
but instead use the host/ip address of the docker-machine VM
HOST=$(docker-machine ip)
and then connect to it like so:
mongo --host $HOST

Can not connect to Mongo docker instance via mono client on mac

I have installed Mongo docker image and run it using those commands (mac boot2docker is installed)
docker pull mongo
and
docker run --name some-mongo -d mongo
but now I want to connect to it via mongo client running:
mongo --port 27017 --host 127.0.0.1
but I get this error message:
MongoDB shell version: 3.0.4
connecting to: 127.0.0.1:27017/test
2015-07-27T14:22:24.088+0300 W NETWORK Failed to connect to 127.0.0.1:27017, reason: errno:61 Connection refused
2015-07-27T14:22:24.094+0300 E QUERY Error: couldn't connect to server 127.0.0.1:27017 (127.0.0.1), connection attempt failed
at connect (src/mongo/shell/mongo.js:181:14)
at (connect):1:6 at src/mongo/shell/mongo.js:181
exception: connect failed
It is clear to me that Docker fails to expose the ports since telnet to 27017 on the localhost fails as well.
What the hack am I doing wrong?
You have 2 problems :
Like h3nrik said you should connect to the boot2docker VMs address. If you don't know it use the following command :
boot2docker ip
And your port isn't open in the first place.
Your Docker run command should look like this :
docker run -p 27017:27017 --name some-mongo -d mongo
Instead of 127.0.0.1 you should use the boot2docker VMs IP address. Usually 192.168.59.103. You can verify to which IP you should connect executing boot2docker ip.
Update: I discovered that you do not export any ports by your containers run statement:
docker run --name some-mongo -d mongo
Without any ports exposed you cannot connect, of course. Try to re-connect after running (depending on your requirements you can add more ports according to the mongodb documentation):
docker run --name some-mongo -d -p 27017:27017 mongo