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