1

I am learning mongodb and basically I have a simple spring boot application which connects to a mongo db to save information.

My application properties is as follows:

spring.data.mongodb.port=27017
spring.data.mongodb.database=emailDb
spring.data.mongodb.username=admin-user123
spring.data.mongodb.password=admin-password123
spring.data.mongodb.authentication-database=admin

So I have created a docker-compose file to link the db with my spring boot app:

version: '3.2'

volumes:
  mongodb_data:     #creates mount point on docker for mongodb
    driver: local

# config postgres, Keycloak & Mongodb
services:
  servicel-component:
    image: servicel-component
    networks:
      test:
        aliases:
          - email
    environment:
      SPRING_PROFILES_ACTIVE: message
      SPRING_RABBITMQ_HOST: rabbitmq
    ports:
      - 8080:8080       # port for postgres
    depends_on:
      - rabbitmq

  rabbitmq:
    image: rabbitmq:3-management
    environment:
      RABBITMQ_DEFAULT_USER: guest
      RABBITMQ_DEFAULT_PASS: guest
    ports:
      - "5672:5672"
      - "15672:15672"
    networks:
      test:
        aliases:
          - rabbitmq
  mongodb:
    image: mongo:latest
    networks:
      test:
        aliases:
          - mongodb
    environment:
      MONGO_INITDB_ROOT_USERNAME: admin-user123
      MONGO_INITDB_ROOT_PASSWORD: admin-password123
    restart: always
    ports:
      - 27017:27017
    volumes:
      - mongodb_data:/data/db
networks:
  test:
    external: true

When u execute docker-compose up the following exception is triggered:

2020-08-07 09:35:23.063 INFO 1 --- [ main] org.mongodb.driver.cluster : Adding discovered server localhost:27017 to client view of cluster

2020-08-07 09:35:23.143 INFO 1 --- [localhost:27017] org.mongodb.driver.cluster : Exception in monitor thread while connecting to server localhost:27017


com.mongodb.MongoSocketOpenException: Exception opening socket

at com.mongodb.internal.connection.SocketStream.open(SocketStream.java:70) ~[mongodb-driver-core-3.11.2.jar!/:na]

at com.mongodb.internal.connection.InternalStreamConnection.open(InternalStreamConnection.java:128) ~[mongodb-driver-core-3.11.2.jar!/:na]

at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitorRunnable.run(DefaultServerMonitor.java:117) ~[mongodb-driver-core-3.11.2.jar!/:na]

at java.base/java.lang.Thread.run(Thread.java:832) ~[na:na]

Caused by: java.net.ConnectException: Connection refused

at java.base/sun.nio.ch.Net.pollConnect(Native Method) ~[na:na]

at java.base/sun.nio.ch.Net.pollConnectNow(Net.java:589) ~[na:na]

at java.base/sun.nio.ch.NioSocketImpl.timedFinishConnect(NioSocketImpl.java:542) ~[na:na]

at java.base/sun.nio.ch.NioSocketImpl.connect(NioSocketImpl.java:597) ~[na:na]

at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:333) ~[na:na]

at java.base/java.net.Socket.connect(Socket.java:648) ~[na:na]

at com.mongodb.internal.connection.SocketStreamHelper.initialize(SocketStreamHelper.java:64) ~[mongodb-driver-core-3.11.2.jar!/:na]

at com.mongodb.internal.connection.SocketStream.initializeSocket(SocketStream.java:79) ~[mongodb-driver-core-3.11.2.jar!/:na]

at com.mongodb.internal.connection.SocketStream.open(SocketStream.java:65) ~[mongodb-driver-core-3.11.2.jar!/:na]

... 3 common frames omitted

When I don't run servicel-component on docker, just run it as mvn spring-boot:run and run mongodb on docker it works fine. Any idea what i am missing here please?

2
  • You don't have mongo running on that port already do you, outside of docker? Commented Aug 7, 2020 at 10:31
  • Thanks the the reply, i have only one mongo running which is on docker Commented Aug 7, 2020 at 10:46

1 Answer 1

1

You can't use localhost, this refer to the container itself. You need use host IP or use docker DNS if the containers are in the same network (not your case).

2020-08-07 09:35:23.143 INFO 1 --- [localhost:27017] org.mongodb.driver.cluster : Exception in monitor thread while connecting to server localhost:27017
Sign up to request clarification or add additional context in comments.

4 Comments

Thanks but how do i get the host ip of the mongo docker container?
If they are in the same network, you can use the name of the container: mongodb:27017
An alternative is to pass your host IP in a environment variable to your container. nickjanetakis.com/blog/…
Thanks i have added a cantainer name in the docker-compose file for mongo and define it in application properties spring.data.mongodb.host and it works

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.