Problema
Está intentando acceder a la base de datos con una IP/nombre de host incorrectos. Como puede ver, accediendo a localhost
en el contenedor de primavera se resolvería en ese contenedor y no hay 27017
puerto escuchando allí. Cuando ejecuta el jar en el host docker, tiene 27017
puerto disponible, por eso funciona.
Solución
Puede usar --hostname
marcar en docker run
comando para configurar el nombre de host del contenedor DB para que pueda conectarse desde el contenedor Spring usando el nombre de host.
Sin embargo, la mejor solución es usar un archivo docker-compose e iniciar los contenedores usando docker-compose up
.
En primer lugar, utilice
MongoClient mongo = new MongoClient("db", 27017));
en su código Spring y cree una imagen de su código.
Luego, siga los pasos a continuación para iniciar los contenedores:
A) Crear archivo de redacción
Cree un archivo llamado docker-compose.yml
con el siguiente contenido:
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) Ejecute el archivo de redacción
Ejecute el siguiente comando para ejecutar el archivo de redacción:docker-compose up -d