connecting to local mongodb from docker container
Solution 1
On Docker for Mac, you can use host.docker.internal
if your mongo is running on your localhost. You could have your code read in an env variable for the mongo host and set it in the Dockerfile like so:
ENV MONGO_HOST "host.docker.internal"
See here for more details on https://docs.docker.com/docker-for-mac/networking/#use-cases-and-workarounds
Solution 2
Adding @vlad-holubiev as answer here because it has worked for me and help users to find it.
Using the network host option on docker run, as specified in the docs:
With the network set to host a container will share the host’s network stack and all interfaces from the host will be available to the container. The container’s hostname will match the hostname on the host system.
docker run -d -e ROOT_URL=http://localhost -e MONGO_URL=mongodb://localhost:27017 --network="host"
Solution 3
A docker container is a separate from your computer,
So you will not be able to connect to your localhost
.
You should run the mongo server on a container and the connect with the image name.
mongodb://CONTAINER-NAME:port
![chaudharyp](https://i.stack.imgur.com/sfzIh.jpg?s=256&g=1)
Comments
-
chaudharyp almost 4 years
I have a local mongoDB server running on mongodb://127.0.0.1:27017. My DB name is localv2. I have a node/express app with the Dockerfile as follows:
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
The server.js file has a connection to local mongodb with the following code:
app.db = mongoose.connect("mongodb://127.0.0.1:27017/localv2", options);
This doesn't work when I spin up a container from the image created using the Dockerfile above. I read somewhere that Docker creates a VLAN with a gatway IP address of its own. When I
docker inspect
my container, my gateway IP address: 172.17.0.1.Even on changing the mongodb connection to
app.db = mongoose.connect("mongodb://172.17.0.1:27017/localv2", options)
and re-building the image and starting a new container, I still get the error:
MongoError: failed to connect to server [172.17.0.1:27017] on first connect [MongoError: connect ECONNREFUSED 172.17.0.1:27017]
Command to run the container:
docker run -p 3002:3002 image-name
Please help.
-
Armeen Moon almost 7 yearsThis is a far better answer.
-
RaduM over 6 yearsIt all depends if you exposed the port. If you exposed the internal docker container port you can connect using localhost.
-
Gibberish about 5 yearsI prefer this solution to all others
-
MikeT over 4 yearsthe docker container is separate but connected, so it is possible to connect to your local machine from inside the container you just need to figure out what the local machines ip address is on the docker network, this was easier beforethey broke the local network dns integration (~ version 19.0) when you could specify the local machines name and the dns would autolookup
-
JSking over 4 yearstrying to solve same problem, did not understand how you used this: you used this code to run your container?
-
Rohit Rane over 4 yearsGetting following error : node: bad option: --network=host ! What do I do?
-
vinsent paramanantham about 4 yearsHow to specify in docker-compose file for external mongo database connection..
-
Abhishek Pankar about 3 years@jackOfAll, did you use windows/mac OS?
-
Rohit Rane about 3 years@AbhishekPankar Mac
-
Abhishek Pankar about 3 yearsNetwork host works only on linux machine. Check it here docs.docker.com/network/host