Problema
Stai tentando di accedere al DB con IP/nome host errato. Come puoi vedere, accedendo a localhost
nel contenitore di primavera si risolverebbe in quel contenitore e non c'è nessun 27017
porta in ascolto lì. Quando esegui il jar sull'host Docker, ha 27017
porta disponibile, ecco perché funziona.
Soluzione
Puoi usare --hostname
flag in docker run
comando per impostare il nome host del contenitore DB in modo che tu possa connetterti ad esso dal contenitore Spring utilizzando il nome host.
La soluzione migliore, tuttavia, è utilizzare un file di composizione mobile e avviare i contenitori utilizzando docker-compose up
.
Prima di tutto usa
MongoClient mongo = new MongoClient("db", 27017));
nel tuo codice Spring e crea un'immagine del tuo codice.
Successivamente, segui i passaggi seguenti per avviare i contenitori:
A) Crea un file di composizione
Crea un file chiamato docker-compose.yml
con i seguenti contenuti:
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) Esegui il file di composizione
Esegui il comando seguente per eseguire il file di composizione:docker-compose up -d