MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Mongodb kann im Docker nicht mit dem Springboot-Container verbunden werden

Problem

Sie versuchen, mit einer falschen IP/einem falschen Hostnamen auf die DB zuzugreifen. Wie Sie sehen können, wird auf localhost zugegriffen im Frühlingscontainer würde sich in diesen Container auflösen und es gibt kein 27017 Port hört dort. Wenn Sie das JAR auf dem Docker-Host ausführen, hat es 27017 Port verfügbar, deshalb funktioniert es.

Lösung

Sie können --hostname verwenden Flag in docker run Befehl, um den Hostnamen des DB-Containers festzulegen, sodass Sie vom Spring-Container aus mit dem Hostnamen eine Verbindung herstellen können.

Die bessere Lösung ist jedoch, eine Docker-Compose-Datei zu verwenden und die Container mit docker-compose up zu starten .

Verwenden Sie zunächst

MongoClient mongo = new MongoClient("db", 27017));

in Ihrem Spring-Code und erstellen Sie ein Image Ihres Codes.

Führen Sie anschließend die folgenden Schritte aus, um die Container zu starten:

A) Compose-Datei erstellen

Erstellen Sie eine Datei namens docker-compose.yml mit folgendem Inhalt:

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) Führen Sie die Compose-Datei aus

Führen Sie den folgenden Befehl aus, um die Compose-Datei auszuführen:docker-compose up -d