как я могу увидеть, какие порты mongo прослушивает из оболочки mongo?

100

Если у меня запущен экземпляр mongo, как я могу проверить, какие номера портов он прослушивает из оболочки? Я думал, что так db.serverStatus()получится, но не вижу. я вижу это

"connections" : {
    "current" : 3,
    "available" : 816

Что близко ... но нет. Предложения? Я прочитал документы и, похоже, не могу найти ни одной команды, которая сделает это.

Jcollum
источник
Вам нужна оболочка монго? Или подойдет обычная оболочка unix? :)
Серджио Туленцев
@SergioTulentsev Мне особенно интересно, возможно ли это внутри оболочки mongo - поскольку я уже нашел информацию, которая близка.
jcollum

Ответы:

72

Из системной оболочки вы можете использовать lsof(см. Ответ Дерика ниже) или netstat -anпросмотреть, что на самом деле делает процесс. Однако, если у вас есть доступ только к mongoоболочке (что подразумевает заголовок вашего вопроса), вы можете запустить serverCmdLineOpts()команду. Этот вывод даст вам все аргументы, переданные в командной строке (argv) и аргументы из файла конфигурации (проанализированные), и вы сможете сделать вывод, что порты mongodпрослушивают на основе этой информации. Вот пример:

db.serverCmdLineOpts()
{
    "argv" : [
        "./mongod",
        "-replSet",
        "test",
        "--rest",
        "--dbpath",
        "/data/test/r1",
        "--port",
        "30001"
    ],
    "parsed" : {
        "dbpath" : "/data/test/r1",
        "port" : 30001,
        "replSet" : "test",
        "rest" : true
    },
    "ok" : 1
}

Если вы не передали определенные параметры порта, подобные приведенным выше, то по умолчанию mongodбудет прослушиваться 27017 и 28017 ( http-консоль ). Примечание: есть несколько других аргументов, которые могут изменять порты без явного указания, см. Здесь:

https://docs.mongodb.org/manual/reference/configuration-options/#sharding.clusterRole

Адам Комерфорд
источник
4
Мой результат: { "argv" : [ "mongod" ], "parsed" : { }, "ok" : 1 }это мне мало что говорит. Я думаю, это говорит мне, что я использую порт по умолчанию.
jcollum
5
правильно - если он вообще не указан (а в вашем случае это похоже), тогда все по умолчанию, что ставит вас на 27017
Адам
219

Вы можете сделать это из оболочки операционной системы, запустив:

sudo lsof -iTCP -sTCP:LISTEN | grep mongo
Дерик
источник
4
@SmartyTwiti Я явно попросил команду с использованием оболочки mongo; lsof не работает
jcollum
36

Попробуй это:

db.runCommand({whatsmyuri : 1})

Он отобразит как IP-адрес, так и номер порта.

Гану
источник
это новое? в какой версии монго он появился?
jcollum 07
1
@jcollum версии 3.0 имеет эту новую функцию.
Гану
6
Кажется, это показывает порт оболочки или что-то в этом роде ... Вывод от lsof:> mongod 14942 dmitrii 5u IPv4 0xc36ad5231f84011d 0t0 TCP *: 27017 (СЛУШАТЬ) И от whatsmyurlкоманды: {"you": "127.0.0.1:50294", "ok": 1 } И они не совпадают.
dmi3y
11

По умолчанию MongoDB прослушивает только один порт (27017). Если --restинтерфейс активен, порт 28017 (27017 + 1000) также будет открыт для обработки веб-запросов для получения подробной информации.

MongoDB поддерживает getParameterкоманду, но она работает только в том случае, если вы уже подключены к базе данных (в этот момент вы уже знаете порт).

Гейтс ВП
источник
2
Хм, поэтому мы можем сказать, что если я подключен и не знаю порта, это должно быть 27017. Если порт не 27017, я должен знать порт, чтобы подключиться. Звучит правильно?
jcollum
1

Попробуйте следующую команду, она работает для меня:

sudo lsof -iTCP -sTCP:LISTEN | grep mongo
nixxo_raa
источник