I'm new to docker. I'm trying to create a MongoDB container and a NodeJS container. My file looks:
version: '2'
services:
backend:
image: node:5.11-onbuild
ports:
- "3001:3001"
volumes:
- .:/code
working_dir: "/code"
links:
- mongodb
mongodb:
image: mongo:3.3
expose:
- 27017
It should run npm install
and then node .
.
But docker-compose up
ends up with [MongoError: connect ECONNREFUSED 127.0.0.1:27017]
while the command node .
.
I think this is because of the bind_ip = 127.0.0.1
in the file /etc/mongod.conf
. Is this right?
I use boot2docker on a Win10 system.
How can I solve this problem so that node can connect to the MongoDB?
In your backend app, connect to
mongodb:27017
instead of127.0.0.1:27017
. Where 'mongodb' is the name of your container within docker-compose.yml.Most likely, yes. 127.0.0.1 points to localhost inside the mongodb container, so is not accessible from outside the container. Binding to 0.0.0.0 will probably work.
With the link you specified in the docker-compose.yml, your backend container should then be able to connect to the mongo container through
mongodb:27017
I recently encountered similar issue. I am running docker toolbox under win 10 and this is how it worked for me:
1) I had to verify which URL my default docker machine is using. This can be checked by running
docker-machine ls
command. It will list available machines:2) When running mongodb image specify the port mapping
3) At that point the valid mongo url would look something like this
where
192.168.99.100
was the default machine URL from the point 1)Hope it helps someone.
You have to tell the container to use it's own IP Address instead of localhost.
For example, let's assume you generated scaffold code with
expressjs
, you have to write inroutes/index.js
where
172.17.0.5
is the$CONTAINER_IP
you can find the container ip via
$ docker inspect $CONTAINER_HOSTNAME | grep IPAddress
If you still can't understand you can take a peek at my Docker NodeJS and MongoDB app