BEARBEITEN:
Ich habe noch nie eine Spring-Boot-Entwicklung durchgeführt, aber der Fehler, von dem Sie sagen, dass er angezeigt wird, hat möglicherweise nichts mit dem Mongo-Problem zu tun. Hier ist jedoch eine Erklärung, warum Ihre Mongo-Verbindung fehlschlägt:
docker-compose
erstellt ein virtuelles Netzwerk, wenn eines nicht in der Datei angegeben wurde (wie in Ihrem Fall).
Alle Ihre Anwendungen laufen innerhalb dieses Netzwerks, vollständig voneinander isoliert. Also localhost
in Ihrem Spring-Boot-Container bezieht sich tatsächlich auf sich selbst. Das bedeutet, dass Ihre Spring-Boot-Anwendung den mongo
erwartet Instanz innerhalb ihres Containers laufen soll (was nicht der Fall ist, sie befindet sich in einem anderen Container).
Dies wäre in Ordnung gewesen, wenn sowohl die Datenbank als auch die Anwendung im Netzwerk Ihres Laptops ausgeführt wurden. Aber wie erwähnt laufen sie jetzt im docker-compose
Netzwerk, in vollständiger Isolation.
Allerdings docker-compose
ist wirklich clever! Es erstellt für jeden Ihrer Container ein DNS, das den Dienstnamen verwendet (in Ihrem Fall mongo
und spring
), die in Ihrem docker-compose
angegeben sind Datei, um einen einfachen Zugriff auf die Container innerhalb des Netzwerks zu ermöglichen.
Sie sollten also in der Lage sein, spring.data.mongodb.uri=mongodb://localhost:27017/db
zu ändern zu spring.data.mongodb.uri=mongodb://mongo:27017/db
und das sollte es ermöglichen, sich zu verbinden.