SocketException: 已在使用的地址 MONGODB

我发现这个错误时,尝试运行 mongodb。我通过自制安装它。请协助

Agungs-MacBook-Pro:~ agungmahaputra$ mongod
2017-12-26T15:31:15.911+0700 I CONTROL  [initandlisten] MongoDB starting : pid=5189 port=27017 dbpath=/data/db 64-bit host=Agungs-MacBook-Pro.local
2017-12-26T15:31:15.911+0700 I CONTROL  [initandlisten] db version v3.6.0
2017-12-26T15:31:15.911+0700 I CONTROL  [initandlisten] git version: a57d8e71e6998a2d0afde7edc11bd23e5661c915
2017-12-26T15:31:15.911+0700 I CONTROL  [initandlisten] OpenSSL version: OpenSSL 1.0.2n  7 Dec 2017
2017-12-26T15:31:15.911+0700 I CONTROL  [initandlisten] allocator: system
2017-12-26T15:31:15.911+0700 I CONTROL  [initandlisten] modules: none
2017-12-26T15:31:15.911+0700 I CONTROL  [initandlisten] build environment:
2017-12-26T15:31:15.911+0700 I CONTROL  [initandlisten]     distarch: x86_64
2017-12-26T15:31:15.911+0700 I CONTROL  [initandlisten]     target_arch: x86_64
2017-12-26T15:31:15.911+0700 I CONTROL  [initandlisten] options: {}
2017-12-26T15:31:15.911+0700 E STORAGE  [initandlisten] Failed to set up listener: SocketException: Address already in use
2017-12-26T15:31:15.911+0700 I CONTROL  [initandlisten] now exiting
2017-12-26T15:31:15.911+0700 I CONTROL  [initandlisten] shutting down with code:48
Agungs-MacBook-Pro:~ agungmahaputra$
111120 次浏览

You already have a process running in the port 27017 which is used by mongodb. So either you need to stop the process in that port or try with different port number.

Try mongod --port 27018

You can change the port number of your choice.

EDIT:

You can also just stop all the running instances of mongo server using sudo killall mongod as mentioned by @Dassi Orleando in the comments. And run mongod

You can kill the previous mongod instance and start the new one.

To kill the previous mongod instance, first search for a list of tasks running on your machine by typing,

sudo lsof -iTCP -sTCP:LISTEN -n -P

Search for mongod COMMAND and its PID and type,

sudo kill <mongo_command_pid>

Now start your mongod instance by typing,

mongod

You can see MongoDB running successfully.

if you're using mongodb version 4.*

in default settings, there should be a "db" folder "/data/db" having the necessary permission.

to check it the MongoDB service started

brew services list

if not then run

brew services start mongodb

run mongo instead of mongod

First, shutdown the running server using:

mongod --shutdown

Then run:

sudo mongod

Make Sure the error is of the port , if using macos catalina there is a reported issue for ~/data/db which also causes this.

I solved it pasting the command below into the command line in order to close mongo's server.

sudo pkill -f mongod

"sudo" (Super User Do) runs the command admin permissions, so it will ask you for your user password

Summary other(@Tony Roczz, @Balasubramani M) answer to here:

Root Cause

error: Failed to set up listener: SocketException: Address already in use

means:

  • previously have run mongodb
    • probably use default port 27017

Solution

(most case) kill and restart mongod

kill mongod

two method:

  • use killall
    • killall mongod
  • kill by PID
    • find mongod PID
      • method 1: ps aux | grep mongod
      • output can see like this: limao 425 ... /usr/local/opt/mongodb-community/bin/mongod --config /usr/local/etc/mongod.conf
      • method 2: lsof -iTCP -sTCP:LISTEN -n -P
      • output can see like this: mongod 425 limao .. TCP 127.0.0.1:27017 (LISTEN)
    • kill by PID: kill -9 425

re-start mongod

  • most case: mongod
  • some special case
      • for install community version in Mac by: brew install mongodb-community

(for some people) run with another port

  • run with another port: mongod --port 27018
    • only for those want to run multiple mongod server same time

Additional Note

which port the running mongodb is using?

 lsof -iTCP -sTCP:LISTEN -n -P
COMMAND     PID  USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
mongod      425 limao   10u  IPv4 0xab744305e75263cf      0t0  TCP 127.0.0.1:27017 (LISTEN)

can see 27017 is current running mongodb port.

how to check / make sure mongod is running

  • check mongod status:
      • output can see mongod service
      • if installed by brew and start by brew

After running this commands below:

sudo lsof -iTCP -sTCP:LISTEN -n -P

Search for mongod COMMAND and its PID and type,

sudo kill <mongo_command_pid>

And restarting mongod, it still fails with the same error "SocketException: Address already in use MONGODB".

Server was restarted yesterday and then this happened.

Just this single command

sudo pkill -f mongod

This may sound obvious but you should check if mongodb is already running. So instead of first starting the the DB by running:

sudo mongod

Try directly running:

mongo

If your mongod process is already down, just remove the .sock file in /tmp:

My mongod is already down, so does not appears in:

lsof -iTCP -sTCP:LISTEN -n -P

The error was:

[root@ol7db19c1 ~]# mongod -f /etc/csrs_2.conf
about to fork child process, waiting until server is ready for connections.
forked process: 6721
ERROR: child process failed, exited with error number 48
To see additional information in this output, start without the "--fork" option.

In the log file (/var/mongodb/db/csrs2.log):

2020-07-05T16:03:59.354-0300 E  STORAGE  [initandlisten] Failed to set up listener: SocketException: Address already in use

So, find for the socket locking:

ls -ltra /tmp|grep .sock

And just remove it (do it with caution in production environment):

rm -f mongodb-26002.sock

G-luck!