简体   繁体   中英

Connecting to a Mongo container from Spring container

I have a problem here that I really cannot understand. I already saw few topics here with the same problem and those topics was successfully solved. I basically did the same thing and cannot understand what I'm doing wrong.

I have a Spring application container that tries to connect to a Mongo container through the following Docker Composer :

version: '3'
services:
  app:
    build: .
    ports:
      - "8080:8080"
    links:
      - db
      
  db:
    image: mongo
    volumes:
      - ./database:/data
    ports:
      - "27017:27017"

In my application.properties :

spring.data.mongodb.uri=mongodb://db:27017/app

Finally, my Dockerfile :

FROM eclipse-temurin:11-jre-alpine
WORKDIR /home/java
RUN mkdir /home/java/bar
COPY ./build/libs/foo.jar /home/java/bar/foo.jar
CMD ["java","-jar", "/home/java/bar/foo.jar"]

When I run docker compose up --build I got:

2022-11-17 12:08:53.452  INFO 1 --- [null'}-db:27017] org.mongodb.driver.cluster               : Exception in monitor thread while connecting to server db:27017

Caused by: java.net.UnknownHostException: db

Running the docker compose ps I can see the mongo container running well, and I am able to connect to it through Mongo Compass and with this same Spring Application but outside of container. The difference running outside of container is the host from spring.data.mongodb.uri=mongodb://db:27017/app to spring.data.mongodb.uri=mongodb://localhost:27017/app .

Also, I already tried to change the host for localhost inside of the spring container and didnt work.

You need to specify MongoDB host, port and database as different parameters as mentioned here .

spring.data.mongodb.host=db

spring.data.mongodb.port=27017

spring.data.mongodb.authentication-database=admin

As per the official docker-compose documentation the above docker-compose file should worked since both db and app are in the same.network (You can check if they are in different.networks just in case)

If the.networking is not working, as a workaround, instead of using localhost inside the spring container, use the server's IP, ie, mongodb://<server_ip>:27017/app (And make sure there is no firewall blocking it)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM