як я можу побачити, які порти mongo слухає з оболонки mongo?


100

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

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

Що близько ... але ні. Пропозиції? Я прочитав документи і, здається, не знайшов жодної команди, яка б це зробила.


Вам потрібна оболонка монго? Або звичайна оболонка Unix зробить? :)
Серхіо Туленцев

@SergioTulentsev Мене конкретно цікавить, чи можливо це всередині оболонки монго - оскільки я вже знайшов інформацію, яка близька.
jcollum

Відповіді:


72

З системної оболонки ви можете скористатися lsof(див. Відповідь Деріка нижче) або netstat -anпереглянути, що процес насправді робить. Однак, якщо у вас є лише доступ до mongoоболонки (що означає назву вашого питання), ви можете запустити serverCmdLineOpts()команду. Цей висновок дасть вам всі аргументи, передані в командному рядку (argv) та аргументи з файлу config (розбору), і ви можете зробити висновок про 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

35

Спробуйте це:

db.runCommand({whatsmyuri : 1})

Він відображатиме і IP-адресу, і номер порту.


це нове? в якій версії монго воно з’явилося?
jcollum

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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.