I have MongoDB running on a Raspberry Pi at my house, and I'm trying to edit the config file so that other computers at my house can connect to it. Here's some numbers:
Device
IP
Raspberry Pi
192.168.1.5
Laptop
192.168.1.7
When I edit /etc/mongod.conf to look like this, I can connect from my laptop:
net:
port: 27017
bindIp: 0.0.0.0
But, what I want to do is this, which should allow my laptop to connect:
net:
port: 27017
bindIp: 127.0.0.1,192.168.1.7
But this doesn't work. When I run sudo service mongod restart it errors and says it exited with status code 48. I looked up error code 48, which is supposed to indicate that the port is already in use, but if I change the bindIp property to either 0.0.0.0 or 127.0.0.1 it restarts without errors.
How can I bind MongoDB to IPs on my local network?
Solved:
User R2D2 in the comments was correct; I needed to use the IP of the host machine, not the IP of the connecting machine. This makes sense, now that I know. Below is the working config - notice the IP listed is the IP of the Raspberry Pi, which is the same IP my dev machines will be pointing to in order to connect.
net:
port: 27017
bindIp: 127.0.0.1,192.168.1.5
User R2D2 in the comments was correct; I needed to use the IP of the host machine, not the IP of the connecting machine. This makes sense, now that I know. Below is the working config - notice the IP listed is the IP of the Raspberry Pi, which is the same IP my dev machines will be pointing to in order to connect.
net:
port: 27017
bindIp: 127.0.0.1,192.168.1.5
I tried all the things I could find:
1) Set up a new network security group (NSG) in Azure config
2) Configured windows firewall to allow port traffic on 27017.
3) Edited the cfg file for MongoDB to bind to the outside subnet 10.0.0.4 along with the local ip.
net:
bindIp: 127.0.0.1,10.0.0.4
port: 28017
systemLog:
destination: file
path: c:\mongodb\logs\mongod.log
storage:
dbPath: c:\mongodb\data\db
I have gone as far as disabling the windows firewall - no success.
I have gone as far as changing the network security group in the azure config to allow all traffic on all ports - no success.
I've changed MongoDB to use a non default port and updated the firewall and NSG accordingly as you can see from the cfg above - no success.
In all of the above I cannot even query the port from multiple remote machines (win 7 and win 10).
portqry.exe -n xxx.southcentralus.cloudapp.azure.com -e 28017 -p BOTH exits with return code 0x00000002
This was easy to do (configure an endpoint) on the old Virtual Machine config. Now with these resource groups, I'm obviously missing something.
Your NSG settings look ok. The only thing that looks suspicious is your bindIp. Please try setting it to:
net:
bindIp: 0.0.0.0
port: 28017
I recreated your configuration and this is the only difference. In fact, if I try binding to my internal ip address, mongod fails to start. Try binding to 0.0.0.0 - this should allow you to connect both via localhost and from the outside world.
Note: If you do want to have multiple addresses in your bindIp, you need to enclose the list in
[ ... ]
brackets.
I am a newbie for setting up the server environment and mongoDB. This may sounds something really simple, however, I really need your help on it.
I am trying to connect to my virtual machine which runs the mongodb instance from the local machine, which I believe should be similar to the production environment when I run it on a separate remote server.
The environment is as following:
Private IP for virtual machine: 192.168.184.155
Public IP for both local machine and virtual machine: 96.88.169.145
I changed the bind_ip in /etc/mongod.conf file from
bind_ip = 127.0.0.1
to
bind_ip = 127.0.0.1,192.168.184.155,96.88.169.145
After I restarted the mongod service, neither the virtual machine nor the local machine can access mongodb through mongodb command and giving me the following error.
MongoDB shell version: 3.0.1
connecting to: test
2015-03-17T16:02:22.705-0400 W NETWORK Failed to connect to 127.0.0.1:27017, reason: errno:111 Connection refused
2015-03-17T16:02:22.707-0400 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:179:14)
at (connect):1:6 at src/mongo/shell/mongo.js:179
exception: connect failed
However, if I change the
bind_ip = 192.168.184.155
and restart the service, it works and I can access using mongo from my local machine. It seems just not work with multiple ip addresses. I tried to do look up in the mongodb document, however, they does mention that bind_ip takes a comma separated list, which really confused me.
Thanks for your help in advance.
Wrap the comma-separated-Ips with brackets works in mongo 3.2.7 for me:
bindIp = [127.0.0.1, 192.168.184.155, 96.88.169.145]
With the following version of MongoDB:
MongoDB shell version v3.6.10
Reproducing Problem:
When [127.0.0.1,xxx.xxx.xxx.xxx] is used we get the following error.
Scalar option 'net.bindIp' must be a single value
try 'mongod --help' for more information
Analysis
This is because, according to MongoDB Documentation: https://docs.mongodb.com/manual/reference/configuration-options/#net.bindIP
net.bindIP is of type "string".
Solution for binding multiple IP Addresses
bindIp: "127.0.0.1,xxx.xxx.xxx.xxx"
Note: No spaces after commas
You can do that by:
bindIp: [172.31.60.184,127.0.0.1]
Remember to not put a space after the comma.
The default /etc/mongod.conf file has this entry for network interfaces:
# network interfaces
net:
port: 27017
bindIp: 127.0.0.1
This corresponds to the --bind-ip arg parameter on the command line. Notice the dash notation converted to camel case. To expose the database running in a VM to the host, it's simplest to bind the database to all interfaces for testing purposes. This will cover situations where the VM is using a NAT interface or bridged interface. The command line parameter is --bind_ip_all which does not have a parameter, it's existence corresponds to the bindIPAll: true parameter in the configuration file. Therefore, the configuration file should be changed to:
# network interfaces
net:
port: 27017
bindIpAll: true
Notice the bindIp parameter is removed.
It should also be noted that it is possible to add parameters to the command line that override parameters in the config file. Normally, mongod is run with the --config /etc/mongod.conf parameter. It's easier to change the config file instead of hunting down the script what runs it as a daemon and getting systemd to reload and use it.
For details on the YAML-ness of the config file vs. parameters on the command line, see the documentation currently at https://docs.mongodb.com/manual/reference/configuration-options/
If you are running mongod on a VM using NAT, the default port 27017 will not be exposed to the host. It will be necessary to map a port on the host to this port in the guest VM. That's beyond the scope of this answer, but a little research will provide a method used for the VM software you are using (VirtualBox, VMware, etc.)
In my case, with mongoDB 4.4.6 following solution worked -
net:
port: 27017
bindIp: 127.0.0.1;<private_host_ip>
After making changes, restart mongoDB with following command -
sudo systemctl restart mongod
To Check mongoDB status, run -
sudo systemctl status mongod
Thanks for #wdberkeley and #anhlc brought up the clue.
I looked at the log file under /var/log/mongodb/mongod.log. It shows the failing reason for the problem.
2015-03-17T16:08:17.274-0400 I CONTROL [initandlisten] options: { config: "/etc/mongod.conf", net: { bindIp: "127.0.0.1, 192.168.184.155" }, storage: { dbPath: "/var/lib/mongodb" }, systemLog: { destination: "file", logAppend: true, path: "/var/log/mongodb/mongod.log" } }
2015-03-17T16:08:17.332-0400 I NETWORK [initandlisten] getaddrinfo(" 192.168.184.155") failed: Name or service not known
So the mongo.conf file is sensitive to space, which I happened to add and should have noticed. Also just as #anhlc pointed out, 96.88.169.145 is not a valid IP address for VM. So that one also contribute to the error.
Great thanks for both of your help! Hope this may help if someone happened to run into the same problem.
I successfully added a second ip on my version 3.2 service using a comma, no spaces and an FQDN
net:
port: 27017
bindIp: localhost,dev-2.office.sampleorg.com
I am running 3.6 on SUSE 12.x and had an issues using comma separated IP lists. I fixed the issue by
bindIp: 0.0.0.0
In my case the solution was to put the comma separated IP and without any spaces.
bind_ip=192.168.2.29,127.0.0.1
#port = 27017
That way worked:
2018-10-02T07:49:27.952+0000 I CONTROL [initandlisten] options: { config: "/etc/mongodb.conf", net: { bindIp: "192.168.2.29,127.0.0.1", unixDomainSocket: { pathPrefix: "/run/mongodb" } }, storage: { dbPath: "/var/lib/mongodb", journal: { enabled: true } }, systemLog: { destination: "file", logAppend: true, path: "/var/log/mongodb/mongodb.log" } } 2018-10-02T07:49:27.954+0000 I - [initandlisten] Detected data files in /var/lib/mongodb created by the 'wiredTiger' storage engine, so setting the active storage engine to 'wiredTiger'.
Mongo 3.6.3 here.
mongod --version
db version v3.6.3
git version: 9586e557d54ef70f9ca4b43c26892cd55257e1a5
OpenSSL version: OpenSSL 1.1.0g 2 Nov 2017
allocator: tcmalloc
modules: none
build environment:
distarch: x86_64
target_arch: x86_64
MongoDB 6.0.1
bindIp: 127.0.0.1;192.168.1.0
After change just restart mongodb server:
sudo systemctl restart mongod
In Mongo 3.*,
use a bracket such as
net:
port: 27017
bindIp : [127.0.0.1,10.0.0.2,10.0.0.3]
The case in mongodb version 3.6 on my Ubuntu16.04 LTS is that you do not need to put the IP addresses in the square brackets "[]". Delete the space after the comma solve the failed connection problem in the mongod log (/var/log/mongodb/mongod.log)
NETWORK [initandlisten] getaddrinfo(" xxx.xxx.xxx.xxx") failed: Name or service not known
After modify the bindIp: 127.0.0.1 to bindIp: 127.0.0.1,xxx.xxx.xxx.xxx (notice no comma between IPs), the host IP is listening as below:
xxx#xxxx:/var/log/mongodb$ sudo netstat -plnt |egrep mongod
tcp 0 0 xxx.xxx.xxx.xxx:27017 0.0.0.0:* LISTEN 30747/mongod
tcp 0 0 127.0.0.1:27017 0.0.0.0:* LISTEN 30747/mongod
The bindIp rule with comma separated IP addresses is only meant for known ethernet interfaces, or for the 0.0.0.0 and 127.0.0.1 rules. You can only use the ip addresses of your system's Network Interface Cards. If this list contains an unknown IP address, i.e. an IP of another system, your MongoDb instance will not restart and hence you're not able to connect. To check if your MongoDb instance is running, run the following:
$ sudo systemctl status mongod
If you would like to make your MongoDb instance available to other systems on your network, you'll want to bind the local IP associated with the private network. To determine network interface configuration easily, just run an ifconfig from the command line:
$ ifconfig
This will list all available IP addresses that you can use in the bindIp rule. Most certainly, the IP address 96.88.169.145 that you use is not a valid IP address or unknown by your system.
Amazon-linux2 | Cent OS | MongoDB shell version: 3.0.15
This is how it needs to be done in the latest config
#network interfaces
net:
port: 27017
bindIp: [xxx.xxx.xxx.xxx,127.0.0.1] # Listen to local interface only, comment to listen on all interfaces.
Cheers!!
For 4.4.6, so - lets assume for series 4.x (perhaps for some of series 3.x)
The correct syntax is:
bindIp: 127.0.0.1,<private_host_ip>,<public_host_ip>
For each new IP just use , and without any spaces
For LAN access must be used the private_host_ip, you can use ipconfig or ip a for Windows and Linux respectively to know the ip value.
Of course for public WAN access must be used <public_host_ip>, it about your ISP
Warning both ips - private_host_ip and <public_host_ip> - are the locations where your MongoDB server is running, not the remote clients. Therefore exists the wrong assumption to add each new ip where each one represents the remote client IP address (other different than the server IP address - LAN and/or WAN), it is not correct.
Note To avoid problems is better for both use static ips, the private through your router and the second through your ISP.
Ubuntu 16.04 -> MongoDB shell version: 2.6.10
For me the following works:
bind_ip = [127.0.0.1;X.X.X.X]
Notice I have a ; not ,
With MongoDB server version: 3.6.8 plain comma separated list worked for me. With or without spaces after comma.
bind_ip = 127.0.0.1, 192.168.0.104
bind_ip = 127.0.0.1,192.168.0.104
However, adding enclosing in [] fails with following error in MongoDB log
bind_ip = [127.0.0.1,192.168.0.104]
getaddrinfo("[127.0.0.1") failed: Name or service not known
bind_ip = [127.0.0.1, 192.168.0.104]
getaddrinfo("[127.0.0.1") failed: Name or service not known
This worked for my mongo v4.2.15:
vi /etc/mongod.conf
net:
port: 27017
bindIp: 127.0.0.1;X.X.X.X;Y.Y.Y.Y
sudo systemctl restart mongod
If all you want to do is connect to this machine over the network you do NOT need to modify the bind_ip value.
In your case you need to follow the following steps.
Setup the remote machine to block all connections to port 27017
Enable remote machine to only accept connections from your local machine
Setup credentials with MongoDB
Connect with client using credentials.
If you are not sure how to do any of this steps. Check out a blog post that I wrote that goes more in details how to do this.
Blog Post
Hope this helps.