Probleem
U probeert toegang te krijgen tot de database met een verkeerde IP/hostnaam. Zoals je kunt zien, toegang krijgen tot localhost
in de veercontainer zou naar die container gaan en er is geen 27017
haven die daar luistert. Wanneer u de jar op docker-host uitvoert, heeft deze 27017
poort beschikbaar, daarom werkt het.
Oplossing
U kunt --hostname
. gebruiken vlag in docker run
opdracht om de hostnaam van de DB-container in te stellen, zodat u er vanuit de Spring-container verbinding mee kunt maken met behulp van de hostnaam.
De betere oplossing is echter om een docker-compose-bestand te gebruiken en de containers te starten met docker-compose up
.
Gebruik eerst
MongoClient mongo = new MongoClient("db", 27017));
in je Spring-code en maak een afbeelding van je code.
Volg daarna de onderstaande stappen om de containers te starten:
A) Maak een Compose-bestand
Maak een bestand met de naam docker-compose.yml
met de volgende inhoud:
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) Voer het opstelbestand uit
Voer de volgende opdracht uit om het opstelbestand uit te voeren:docker-compose up -d