Ya no necesitas buscar más por internet ya que estás al lugar indicado, tenemos la solución que necesitas y sin complicarte.
Solución:
¿El código de node.js se ejecuta desde un contenedor o desde el host?
Si está en el host, solo use la dirección localhost, es decir:
var url = 'mongodb://localhost:27017';
Esto funcionará porque publicaste el puerto con -p 27017:27017
.
Si el código se ejecuta dentro de un contenedor, sería mejor reescribirlo para usar enlaces y referirse al contenedor mongo por su nombre, por ejemplo:
var url = 'mongodb://mongo:27017';
Luego, cuando inicie el contenedor con el código Node.js, puede hacer algo como:
docker run -d --link mongo:mongo my_container
Docker luego agregará una entrada a /etc/hosts
dentro del contenedor para que el nombre mongo
se resuelve en la IP del contenedor mongo.
Si usa una red definida por el usuario, debería poder recogerla sin vincular o especificar 27017
const MONGO_NAME_STR = "mongodb://" + "your_docker_container_name";
var db = ;
mongo_client.connect(MONGO_NAME_STR, function(err, _db)
//some err handling
db = _db;
);
Otra opción para cualquiera que use docker-compose
version: '3.1'
services:
mongo:
image: mongo
container_name: "mongo"
restart: always
environment:
MONGO_INITDB_ROOT_USERNAME: root
MONGO_INITDB_ROOT_PASSWORD: example
volumes:
- './dockervolume/mongodb:/data/db'
ports:
- 27017:27017
Y puedes conectarte usando la url string
MongoClient.connect("mongodb://root:[email protected]:27017")
.then(()=>
console.log("db connect success");
)
.catch((err)=>
throw err
);
Si conservas alguna sospecha y capacidad de aclarar nuestro sección eres capaz de escribir una referencia y con mucho gusto lo interpretaremos.