10
votes

As part as an attempt to resolve a Hibernate OGM connection issue, I want to see if I connect from Robo 3T.

I build my MongoDB image and start it running.

docker ps:

MacBook-Pro:GoStopHandle NOTiFY$ docker ps CONTAINER ID IMAGE
COMMAND CREATED STATUS PORTS NAMES 0375a68b9988 gostophandlemongodb:latest
"docker-entrypoint.s…" 5 seconds ago Up 4 seconds
0.0.0.0:32844->27017/tcp goStopHandleMongo

The IP address of the containers is:

docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' 0375a68b9988 172.17.0.2

I've enter the 'mongo' shell:

docker exec -it goStopHandleMongo mongo admin

I add a user & password:

> db.createUser(
...   {
...     user: "NOTiFY",
...     pwd: "MyPassword",
...     roles: [ { role: "userAdminAnyDatabase", db: "admin" }, "readWriteAnyDatabase" ]
...   }
... )
Successfully added user: {
    "user" : "NOTiFY",
    "roles" : [
        {
            "role" : "userAdminAnyDatabase",
            "db" : "admin"
        },
        "readWriteAnyDatabase"
    ]
}

I then create a connection in Robo 3T: Robo 3T - create connection

I then set-up the 'Authentication':

Authentication

When I try & connect I get:

Connection dialog

Any suggestions?

3

3 Answers

8
votes

It wasn't until I had to reboot my Mac that I realised that I'd still had a local instance of MongoDB running, therefore the I wasn't connecting to my Docker instance of MongoDB but my local (Brew installed) instance.

Once I'd seen @Artjom Zabelin answer here and "Don't forget to map port to host port"

docker run --name some-mongo -p 27017:27017 -d mongo

It connected to MongoDB running my container.

@Frank Yucheng Gu was correct that I needed 'localhost'.

7
votes

To connect, you should simply connect with localhost:27017 on Robo3T.

The problem originates in the confusion between a container's internal IP and its external IP. The internal IP is your container's address in the docker network, which is isolated from you host network (unless explicitly bridged). When you do the docker inspect command, you grabbed the container's IP on the docker network.

Your container is listening on 0.0.0.0:32844 in the docker network, and exposed to the host with a port mapping to port 27017. So if you have another container in the docker network, you should access your service with 172.17.0.2:32844. But if you have anything outside of the docker network, you should access your mongodb with either localhost:27017 or [your host IP]:27017.

Hope this helps!

0
votes

In my case, I was running docker on Mac OSX and docker was using my host IP address, and as a result docker inspect CONTAINER_ID --format '{{ .NetworkSettings.IPAddress }}' would give me an empty string. Docker host address on Mac OSX and Windows is host.docker.internal. So I was able to connect to the mongodb instance running in docker after setting the host address on robo 3t to host.docker.internal