1
resposta

Alguém sabe como conectar o spring com o mongodb usando docker????

Meu Application.properties está assim:

spring.application.name=crud-mongo

spring.data.mongodb.host=mongo
spring.data.mongodb.port=28000
spring.data.mongodb.database=crud
spring.data.mongodb.username=root
spring.data.mongodb.password=root
spring.data.mongodb.authentication-database=admin

Meu docker-compose assim:

version: '3.8'

services:
  mongo:
    image: mongo:latest
    container_name: mongo
    restart: always
    ports:
      - 28000:27017
    environment:
      MONGO_INITDB_ROOT_USERNAME: root
      MONGO_INITDB_ROOT_PASSWORD: root
    volumes:
      - mongo-data:/data/db

volumes:
  mongo-data:

O container está rodando normalmente:

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

E está dando esse erro:

com.mongodb.MongoSocketException: Este host não é conhecido (mongo)
    at com.mongodb.internal.connection.ServerAddressHelper.getSocketAddresses(ServerAddressHelper.java:75) ~[mongodb-driver-core-5.2.1.jar:na]
    at com.mongodb.internal.connection.SocketStream.initializeSocket(SocketStream.java:100) ~[mongodb-driver-core-5.2.1.jar:na]
    at com.mongodb.internal.connection.SocketStream.open(SocketStream.java:79) ~[mongodb-driver-core-5.2.1.jar:na]
    at com.mongodb.internal.connection.InternalStreamConnection.open(InternalStreamConnection.java:233) ~[mongodb-driver-core-5.2.1.jar:na]
    at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitor.lookupServerDescription(DefaultServerMonitor.java:219) ~[mongodb-driver-core-5.2.1.jar:na]
    at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitor.run(DefaultServerMonitor.java:176) ~[mongodb-driver-core-5.2.1.jar:na]
Caused by: java.net.UnknownHostException: Este host não é conhecido (mongo)
1 resposta

Olá, Breno! Tudo certo?

O erro "Este host não é conhecido (mongo)" indica que o Spring Boot não consegue resolver o nome do host "mongo".

Quando você está executando o Spring Boot fora do Docker, ele não consegue resolver o nome do serviço "mongo" definido no docker-compose. Para resolver isso, você pode tentar o seguinte:

  1. Use o localhost e a porta mapeada:

    No seu application.properties, altere o host para localhost e a porta para 28000, assim:

    spring.data.mongodb.host=localhost
    spring.data.mongodb.port=28000
    
  2. Executar o Spring Boot dentro do Docker:

    Outra abordagem seria executar sua aplicação Spring Boot dentro de um container Docker e conectá-la à mesma rede do MongoDB. Isso permitiria que o Spring Boot resolvesse o nome "mongo" corretamente.

    Você pode adicionar um serviço para sua aplicação no docker-compose.yml:

    version: '3.8'
    
    services:
      mongo:
        image: mongo:latest
        container_name: mongo
        restart: always
        ports:
          - 28000:27017
        environment:
          MONGO_INITDB_ROOT_USERNAME: root
          MONGO_INITDB_ROOT_PASSWORD: root
        volumes:
          - mongo-data:/data/db
    
      app:
        image: seu-usuario/seu-app
        build:
          context: .
          dockerfile: Dockerfile
        depends_on:
          - mongo
        environment:
          SPRING_DATA_MONGODB_HOST: mongo
          SPRING_DATA_MONGODB_PORT: 27017
    
    volumes:
      mongo-data:
    

    Certifique-se de criar um Dockerfile para sua aplicação Spring Boot.

Espero ter ajudado e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.