I want to connect my MongoDB docker to my host pc - mongodb

I want to connect my MongoDB docker with my program in my host.
I try this:
docker pull mongo
docker run -d --name mongodb -p 21017:21017 mongo
docker exec -it mongodb bash
All start fine but I couldn't connect to my host, I try to change my archive /etc/mongod.conf but with anything result.
I have a python program in my host and I want to use docker MongoDB and connect both.
docker container ls
Thank you very much.

That isnt the mongo port 21017:
Mongo port is 27017 .

You need to use below host & port in your python program which resides on docker host -
DB_HOST = localhost
DB_PORT = 27017
From your Docker host, mongoDB container should be accessible at localhost: 27017
Update 1(as suggested by #Schwarz54) -
Also, you are using wrong mongo port, it should be 27017.
Run your container using below command -
docker run -d --name mongodb -p 27017:27017 mongo

I find the problem, it was that in my python program I don't remember to import mongo.
Yes, that was the problem.
Now I can:
myclient = pymongo.MongoClient("mongodb://192.168.10.170:55059")
And all fine.
Thank you for the help I stay two days checking all the code but I don't remember to see if I import the library...

Related

mongodb in docker ERR_CONNECTION_TIMED_OUT

Please help me with this. I tried the following steps, but I am not able to connect to MongoDB.
RUN: docker run -p 27017:27017 --name my-mongo -d mongo:latest
RUN: docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' my-mongo
The output of the above command is an IP-Address. Let the IP-Address is 172.17.0.2.
Open in browser this link: http://172.17.0.2:27017/
If the following output is displayed in a browser then everything is fine: It looks like you are trying to access MongoDB over HTTP on the native driver port. I am stuck here.
Thanks
The IP Address you are trying to access is the container's private ip that is only accessible from within the docker network.
Using the parameter -p that you're specifying on the docker run you're telling docker to map a local port on your host to the port specified on the container, in this case local port 27017 to container port 27017 and after that you can access it with localhost: http://localhost:27017
Read more about this here: https://docs.docker.com/config/containers/container-networking/

How to connect MongoDB docker by Studio 3T?

I am using docker image https://hub.docker.com/_/mongo/ (Latest MongoDB version)
I run command
docker run --name some-mongo -d mongo
Then I install Studio 3T
I enter connection information like this
but I can't connect. What is correct connection must declare in Studio 3T in this case? How to connect MongoDB instance (docker) by Studio 3T?
You need to export the port you want to use in your docker command. e.g.
docker run -p 127.0.0.1:27017:27017 --name some-mongo -d mongo
This opens the port of the container on your host machine.
Click New Connection
Enter the Connection name
Click on From URI
Enter the URI in the following format
mongodb://{username}:{password}#{ip_address}:{port}/?authSource=admin
Click OK
Click Test Connection
Works?
No: Check your username, password, etc
yes: Congrats!
You need to find the IP address where the Docker container is running. On Mac docker runs in the background inside a linux VM that has its own IP. Thus localhost will not work.
To find the IP, run docker-machine env default and set this IP in the Server field.
for those on windows kindly check in task manager and make sure you don't have a local installation of mongo db server running then use localhost in address/connection string
I was running mongodb with wsl2 and docker, so I needed just to add "from uri", and set up ip_adress with the ip from wsl2.
I used this URI:
mongodb://{username}:{password}#{ip_address}:{port}/?authSource=admin
username = MONGO_INITDB_ROOT_USERNAME
password = MONGO_INITDB_ROOT_PASSWORD
port = 27017(docker container port will be set up on docker parameter "-p")
ip_address = Ip from wsl2 in my case, or localhost if you running docker locally.
This was my command to run the container on the first time :
docker container run -d -e MONGO_INITDB_ROOT_USERNAME=mongouser -e MONGO_INITDB_ROOT_PASSWORD=mongopwd -p 27017:27017 -v mongo_vol:/data/db mongo:4.4.3

Connect to container's localhost interface in Docker

Is it possible to connect to a process running in a Docker container but exactly via container's loopback interface ?
Basically I am looking for this option:
docker run ... -p 12345:127.0.0.1:12345 ...
This is rejected by Docker.
The use case is for example to setup Mongo admin user via Localhost Exception
You have the port mapping slightly wrong. Try it like this:
$ docker run -itd -p 27117:27017 mongo
so 27117 is the port you can connect to outwith the docker container, and 27017 is the port mongod is running on within docker
So when I connect the mongo shell I can connect to the mongod within docker like:
$ mongo --port 27117
Try like this :
Step 1 :
pulling mongo image from docker.
docker pull mongo
Step 2 :
Create new directory for storing mongodb data in you shared location like /home/user/databases/mongo
Step 3:
Run mongodb from docker image using below command
if you want change the mongodb port like 12345 set it in the command. 27017 is globally declared in docker you cannot change it but i want locally change the mongodb port like 12345
docker run -d -p 12345:27017 -v /home/user/databases/mongo:/data/db --name mongodb mongo

Can't access to docker mongo without being root

I just installed docker and I could run a mongodb image in a container, without sudo. The port exposed is 27017.
I'm now trying to access it from a shell running on the host, but it works only with
sudo mongo --port 27017
I don't want to use sudo. Is it possible?
Is it possible?
yes, but i think you're not taking the right approach.
if you're running mongodb in a docker container, you shouldn't be running the mongo shell from your host. you should be running it from your container.
for example, if your docker container is named mydb, you can do this:
docker exec -it mydb mongo
this will execute the mongo shell in the mydb container and give you "interactive" and "terminal emulation" (the -it params) so you can work as if you had the mongo shell directly on your computer.

How to allow remote connections from mongo docker container

I am using the official mongodb docker container.
I want to connect to the mongodb container from my host machine on port 27017.
I ran the container with these ports exposed
-p 27017:27017
I am not able to connect (connection refused) and I believe its because the mongo conf file is not configured to allow remote connections. How can I configure it to allow? The official container does not have vi/nano installed to modify the image.
I am able to connect to mongodb from another container by creating a link - however this is not my wish
Better solutions for furthering:
https://blog.madisonhub.org/setting-up-a-mongodb-server-with-auth-on-docker/
https://docs.mongodb.com/v2.6/tutorial/add-user-administrator/
My answer to another question. How to enable authentication on MongoDB through Docker?
Here's what I did for the same problem, and it worked.
Run the mongo docker instance on your server
docker run -d -p 27017:27017 -v ~/dataMongo:/data/db mongo
Open bash on the running docker instance.
docker ps
CONTAINER IDIMAGE COMMAND CREATED STATUS PORTS NAMES
b07599e429fb mongo "docker-entrypoint..." 35 minutes ago Up 35 minutes 0.0.0.0:27017->27017/tcp musing_stallman
docker exec -it b07599e429fb bash
root#b07599e429fb:/#
Reference- https://github.com/arunoda/meteor-up-legacy/wiki/Accessing-the-running-Mongodb-docker-container-from-command-line-on-EC2
Enter the mongo shell by typing mongo.
root#b07599e429fb:/# mongo
For this example, I will set up a user named ian and give that user read & write access to the cool_db database.
> use cool_db
> db.createUser({
user: 'ian',
pwd: 'secretPassword',
roles: [{ role: 'readWrite', db:'cool_db'}]
})
Reference: https://ianlondon.github.io/blog/mongodb-auth/ (First point only)
Exit from mongod shell and bash.
Now run the mongo docker with auth enabled.
docker run -d -p 27017:27017 -v ~/dataMongo:/data/db mongo mongod --auth
Reference: How to enable authentication on MongoDB through Docker? (Usman Ismail's answer to this question)
I was able to connect to the instance running on a Google Cloud server from my local windows laptop using the below command.
mongo <ip>:27017/cool_db -u ian -p secretPassword
Reference: how can I connect to a remote mongo server from Mac OS terminal