Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Can't connect to mongodb in the docker container

I've build a docker container running a mongodb-instance, that should be exposed to the host. However, when i want to connect from the host into the mongodb-container, the connection will be denied.

This is my Dockerfile:

FROM mongo:latest

RUN  mkdir -p /var/lib/mongodb && \
     touch /var/lib/mongodb/.keep && \
     chown -R mongodb:mongodb /var/lib/mongodb

ADD mongodb.conf /etc/mongodb.conf

VOLUME [ "/var/lib/mongodb" ]

EXPOSE 27017

USER mongodb
WORKDIR /var/lib/mongodb

ENTRYPOINT ["/usr/bin/mongod", "--config", "/etc/mongodb.conf"]
CMD ["--quiet"]

/etc/mongodb.conf:

And this is the config-file for MongoDB, where i bind the IP 0.0.0.0 explicitly as found here on SO, that 127.0.0.1 could be the root cause of my issue (but it isn't)

systemLog:
  destination: file
  path: /var/log/mongodb/mongo.log
  logAppend: true
storage:
  dbPath: /var/lib/mongodb
net:
  bindIp: 0.0.0.0

The docker container is running, but a connection from the host is not possible:

host$ docker run -p 27017:27017 -d --name mongodb-test mongodb-image
host$ docker ps
$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                      NAMES
6ec958034a6f        mongodb-image       "/usr/bin/mongod --co"   4 seconds ago       Up 3 seconds        0.0.0.0:27017->27017/tcp   mongodb-test

Find the IP-Address:

host$ docker inspect 6ec958034a6f |grep IPA
            "SecondaryIPAddresses": null,
            "IPAddress": "172.17.0.2",
                    "IPAMConfig": null,
                    "IPAddress": "172.17.0.2",

Try to connect:

host$ mongo 172.17.0.2:27017
MongoDB shell version v3.4.0
connecting to: mongodb://172.17.0.2:27017
2016-12-16T15:53:40.318+0100 W NETWORK  [main] Failed to connect to 172.17.0.2:27017 after 5000 milliseconds, giving up.
2016-12-16T15:53:40.318+0100 E QUERY    [main] Error: couldn't connect to server 172.17.0.2:27017, connection attempt failed :
connect@src/mongo/shell/mongo.js:234:13
@(connect):1:6
exception: connect failed

When i ssh into the container, i can connect to mongo and list the test database successfully.

like image 674
delete Avatar asked Dec 16 '16 14:12

delete


People also ask

Can I use MongoDB in Docker?

MongoDB can be run in a Docker container. There is an official image available on Docker Hub containing the MongoDB community edition, used in development environments. For production, you may custom-build a container with MongoDB's enterprise version.

How does MongoDB run in Docker container from host?

Running MongoDB as a Docker Container If you need to access the MongoDB server from another application running locally, you will need to expose a port using the -p argument. Using this method, you will be able to connect to your MongoDB instance on mongodb://localhost:27017 .


2 Answers

Use host.docker.internal with exposed port : host.docker.internal:27017

like image 94
Abd Abughazaleh Avatar answered Oct 23 '22 01:10

Abd Abughazaleh


Using localhost instead of the ip, allows the connection.

Combine it with the exposed port: localhost:27017

I tested the solution as it was stated in the comments, and it works.

like image 34
Cullen Bond Avatar answered Oct 23 '22 00:10

Cullen Bond