'SOLVED Accessing MongoDB from spring boot container

I'm trying to connect Mongodb which is installed on my windows from a spring boot container but I'm facing :

2022-02-26 00:08:52.868  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:67) ~[mongodb-driver-core-3.8.2.jar!/:na]
-project  |       at com.mongodb.internal.connection.InternalStreamConnection.open(InternalStreamConnection.java:126) ~[mongodb-driver-core-3.8.2.jar!/:na]
-project  |       at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitorRunnable.run(DefaultServerMonitor.java:117) ~[mongodb-driver-core-3.8.2.jar!/:na]
-project  |       at java.lang.Thread.run(Thread.java:748) [na:1.8.0_212]
-project  | Caused by: java.net.ConnectException: Connection refused (Connection refused)
-project  |       at java.net.PlainSocketImpl.socketConnect(Native Method) ~[na:1.8.0_212]
-project  |       at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350) ~[na:1.8.0_212]
-project  |       at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206) ~[na:1.8.0_212]
-project  |       at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188) ~[na:1.8.0_212]
-project  |       at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) ~[na:1.8.0_212]
-project  |       at java.net.Socket.connect(Socket.java:589) ~[na:1.8.0_212]
-project  |       at com.mongodb.internal.connection.SocketStreamHelper.initialize(SocketStreamHelper.java:64) ~[mongodb-driver-core-3.8.2.jar!/:na]
-project  |       at com.mongodb.internal.connection.SocketStream.open(SocketStream.java:62) ~[mongodb-driver-core-3.8.2.jar!/:na]
-project  |       ... 3 common frames omitted

Here is my docker-compose file:

version: '3'
services:
  bootloader:
    build: ./
    container_name: project
    ports:
      - "8080:8080"
    links:
      - host.docker.internal
    volumes:
      - /tmp/

Here is my application.properties file:

spring.data.mongodb.database=IODATABSE
spring.data.mongodb.port=27017
#spring.data.mongodb.host=localhost
spring.data.mongodb.authentication-database=admin
logging.level.org.springframework.data.mongodb.core.MongoTemplate= DEBUG
#spring.data.mongodb.authentication-database=admin
spring.data.mongodb.host=host.docker.internal
#spring.data.mongodb.port=27017
spring.data.mongodb.password=PASSWORD
spring.data.mongodb.username=USERNAME

So I'm wondring if there is a way to solve this, and Thank you



Solution 1:[1]

I solved it by this:

 environment:
      - SPRING_DATA_MONGODB_URI=mongodb://host.docker.internal:27017

Added Mongodb Java Driver on MongoDB pom.xml:

<dependency>
    <groupId>org.mongodb</groupId>
    <artifactId>mongodb-driver-core</artifactId>
    <version>4.5.0</version>
</dependency>

and on my parent pom.xml

    <dependency>
        <groupId>org.mongodb</groupId>
        <artifactId>mongodb-driver-core</artifactId>
        <version>3.8.2</version>
    </dependency>

Refering to MongoDB Documentation on Java drivers: https://docs.mongodb.com/drivers/reactive-streams/

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 BAKHALED Ibrahim