Проблем
Опитвате се да получите достъп до базата данни с грешен IP/име на хост. Както можете да видите, достъп до localhost в пролетния контейнер ще се разреши към този контейнер и няма 27017 порт слуша там. Когато стартирате буркана на докер хост, той има 27017 наличен порт, затова работи.
Решение
Можете да използвате --hostname флаг в docker run команда за задаване на името на хоста на DB контейнера, така че да можете да се свържете с него от Spring контейнера, като използвате името на хоста.
По-доброто решение обаче е да използвате docker-compose файл и да стартирате контейнерите чрез docker-compose up .
Преди всичко използвайте
MongoClient mongo = new MongoClient("db", 27017));
във вашия Spring код и изградете изображение на вашия код.
След това следвайте стъпките по-долу, за да стартирате контейнерите:
A) Създайте Compose файл
Създайте файл с име docker-compose.yml със следното съдържание:
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) Стартирайте композирания файл
Изпълнете следната команда, за да стартирате композирания файл:docker-compose up -d