MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Não é possível conectar o Mongodb ao Springboot Container no docker

Problema


Você está tentando acessar o banco de dados com IP/nome de host incorreto. Como você pode ver, acessando localhost no contêiner de primavera resolveria para esse contêiner e não há 27017 porta escutando lá. Quando você executa o jar no host do docker, ele tem 27017 porta disponível, é por isso que funciona.

Solução


Você pode usar --hostname sinalizar em docker run comando para definir o nome do host do contêiner de banco de dados para que você possa se conectar a ele a partir do contêiner Spring usando o nome do host.

A melhor solução, no entanto, é usar um arquivo docker-compose e iniciar os contêineres usando docker-compose up .

Em primeiro lugar, use
MongoClient mongo = new MongoClient("db", 27017));

em seu código Spring e construa uma imagem do seu código.

Depois, siga as etapas abaixo para iniciar os contêineres:

A) Criar arquivo de composição


Crie um arquivo chamado docker-compose.yml com o seguinte conteúdo:
version: "2.1"
services:
  app:
    # replace imageName with your image name (block in your case)
    image: imageName:tag
    ports:
      - 9876:4000 # Replace the port of your application here if used
    depends_on: 
      - db
  db:
    image: mongo
    volumes:
      - ./database:/data
    ports:
      - "27017:27017"   

B) Execute o arquivo de composição


Execute o seguinte comando para executar o arquivo de composição:docker-compose up -d