Problème
Vous essayez d'accéder à la base de données avec une mauvaise adresse IP/nom d'hôte. Comme vous pouvez le voir, accéder à localhost
dans le conteneur de printemps résoudrait ce conteneur et il n'y a pas de 27017
port d'écoute là-bas. Lorsque vous exécutez le jar sur l'hôte docker, il a 27017
port disponible, c'est pourquoi cela fonctionne.
Solution
Vous pouvez utiliser --hostname
indicateur dans docker run
commande pour définir le nom d'hôte du conteneur DB afin que vous puissiez vous y connecter à partir du conteneur Spring en utilisant le nom d'hôte.
La meilleure solution, cependant, consiste à utiliser un fichier docker-compose et à démarrer les conteneurs à l'aide de docker-compose up
.
Tout d'abord, utilisez
MongoClient mongo = new MongoClient("db", 27017));
dans votre code Spring et créez une image de votre code.
Ensuite, suivez les étapes ci-dessous pour démarrer les conteneurs :
A) Créer un fichier de composition
Créez un fichier nommé docker-compose.yml
avec le contenu suivant :
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) Exécutez le fichier de composition
Exécutez la commande suivante pour exécuter le fichier de composition :docker-compose up -d