yml nodejs node dockerize compose node.js mongodb docker mongoose dockerfile

node.js - nodejs - node js docker



conexión a mongodb local desde contenedor docker (3)

Agregar @ vlad-holubiev como respuesta aquí porque ha funcionado para mí y ayuda a los usuarios a encontrarlo.

Usando la docs.docker.com/engine/reference/run/#network-host , como se especifica en los documentos:

Con la red configurada para alojar un contenedor, se compartirá la pila de red del host y todas las interfaces del host estarán disponibles para el contenedor. El nombre de host del contenedor coincidirá con el nombre de host en el sistema host.

docker run -d -e ROOT_URL=http://localhost -e MONGO_URL=mongodb://localhost:27017 --network="host"

Tengo un servidor mongoDB local que se ejecuta en mongodb: //127.0.0.1: 27017. Mi nombre de base de datos es localv2 . Tengo una aplicación de nodo / expreso con el Dockerfile como sigue:

FROM node:7.5 RUN npm install -g pm2 RUN mkdir -p /usr/src/app WORKDIR /usr/src/app COPY package.json /usr/src/app RUN npm install COPY . /usr/src/app EXPOSE 3002 ENV NODE_ENV local CMD pm2 start --no-daemon server.js

El archivo server.js tiene una conexión a mongodb local con el siguiente código:

app.db = mongoose.connect("mongodb://127.0.0.1:27017/localv2", options);

Esto no funciona cuando giro un contenedor desde la imagen creada con el archivo Docker de arriba. Leí en alguna parte que Docker crea una VLAN con su propia dirección IP. Cuando docker inspect mi contenedor, la dirección IP de mi puerta de enlace: 172.17.0.1.

Incluso al cambiar la conexión mongodb a

app.db = mongoose.connect("mongodb://172.17.0.1:27017/localv2", options)

y reconstruyendo la imagen y comenzando un nuevo contenedor, todavía recibo el error:

MongoError: failed to connect to server [172.17.0.1:27017] on first connect [MongoError: connect ECONNREFUSED 172.17.0.1:27017]

Comando para ejecutar el contenedor: docker run -p 3002:3002 image-name

Por favor ayuda.


En Docker para Mac, puedes usar host.docker.internal si tu mongo se está ejecutando en tu host.docker.internal local. Puede hacer que su código se lea en una variable env para el host mongo y configurarlo en el Dockerfile así:

ENV MONGO_HOST "host.docker.internal"

Consulte aquí para obtener más detalles en https://docs.docker.com/docker-for-mac/networking/#use-cases-and-workarounds


Un contenedor acoplable está separado de su computadora,
Por lo tanto, no podrá conectarse a su localhost .
Debe ejecutar el servidor mongo en un contenedor y conectarse con el nombre de la imagen.

mongodb://CONTAINER-NAME:port