Проблем
Опитвате се да получите достъп до базата данни с грешен 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