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