¿Cómo puedo ver qué puertos está escuchando mongo desde mongo shell?


99

Si tengo una instancia de mongo en ejecución, ¿cómo puedo verificar en qué números de puerto está escuchando desde el shell? Pensé que db.serverStatus()lo haría, pero no lo veo. veo esto

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

Que está cerca ... pero no. Sugerencias He leído los documentos y parece que no puedo encontrar ningún comando que haga esto.


¿Necesitas cáscara de mongo? ¿O el shell normal de Unix servirá? :)
Sergio Tulentsev

@SergioTulentsev Me pregunto específicamente si esto es posible dentro de mongo shell, ya que encontré información que está cerca.
jcollum

Respuestas:


72

Desde el shell del sistema, puede usar lsof(consulte la respuesta de Derick a continuación) o netstat -anpara ver qué está haciendo realmente un proceso. Sin embargo, asumiendo que solo tiene acceso al mongoshell (lo que implica el título de su pregunta), entonces puede ejecutar el serverCmdLineOpts()comando. Esa salida le dará todos los argumentos pasados ​​en la línea de comando (argv) y los del archivo de configuración (analizado) y puede inferir que los puertos mongodestán escuchando en función de esa información. He aquí un ejemplo:

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
}

Si no ha pasado opciones de puerto específicas como las anteriores, mongodestará escuchando en 27017 y 28017 ( consola http ) de forma predeterminada. Nota: hay un par de otros argumentos que pueden alterar los puertos sin ser explícitos, consulte aquí:

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


4
Mi resultado es: { "argv" : [ "mongod" ], "parsed" : { }, "ok" : 1 }eso no me dice mucho. Supongo que me dice que estoy en el puerto predeterminado.
jcollum

5
correcto - si no está especificado en absoluto (y en su caso así lo parece) entonces todo es predeterminado, lo que lo pone en 27017
Adam Comerford

220

Puede hacer esto desde el shell del sistema operativo ejecutando:

sudo lsof -iTCP -sTCP:LISTEN | grep mongo

4
@SmartyTwiti Pedí explícitamente un comando usando el shell mongo; lsof no funciona
jcollum

35

Prueba esto:

db.runCommand({whatsmyuri : 1})

Mostrará tanto la dirección IP como el número de puerto.


es eso nuevo? ¿En qué versión de mongo apareció?
jcollum

1
@jcollum Version 3.0 tiene esta nueva característica.
Ganu

6
Esto parece mostrar el puerto del shell o algo ... Salida de lsof:> mongod 14942 dmitrii 5u IPv4 0xc36ad5231f84011d 0t0 TCP *: 27017 (ESCUCHAR) Y del whatsmyurlcomando: {"usted": "127.0.0.1:50294", "ok": 1 } Y no coinciden.
dmi3y

12

MongoDB solo escucha en un puerto por defecto (27017). Si la --restinterfaz está activa, el puerto 28017 (27017 + 1000) también estará abierto para manejar solicitudes web para obtener detalles.

MongoDB admite un getParametercomando, pero eso solo funciona si ya está conectado a la base de datos (en ese momento ya conoce el puerto).


2
Hmm, entonces podemos decir que si estoy conectado y no conozco el puerto, debe ser 27017. Si el puerto no es 27017, debo conocer el puerto para poder conectarme. ¿Suena bien?
jcollum

2

Prueba el siguiente comando, este funciona para mí:

sudo lsof -iTCP -sTCP:LISTEN | grep mongo
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.