РЕДАКТИРАНЕ:
Никога не съм правил разработка на spring-boot, но грешката, която казвате, че се показва, може много добре да не е свързана с проблема с mongo. Ето обаче обяснение защо вашата mongo-връзка е неуспешна:
docker-compose
създава виртуална мрежа, ако такава не е посочена във файла (както във вашия случай).
Всички ваши приложения работят вътре в тази мрежа, напълно изолирани едно от друго. Като такъв, localhost
във вашия spring-boot контейнер всъщност се отнася за себе си. Това означава, че приложението ви за пролетно стартиране очаква mongo
екземпляр да се изпълнява вътре в своя контейнер (което не е, той е в различен контейнер).
Това би било добре, когато базата данни и приложението работят в мрежата на вашия лаптоп. Но както споменахме, те сега се изпълняват в docker-compose
мрежа, в пълна изолация.
Въпреки това, docker-compose
наистина е хитро! Той създава DNS за всеки от вашите контейнери, който използва името на услугата (във вашия случай mongo
и spring
), посочени във вашия docker-compose
файл, за да позволи лесен достъп до контейнерите вътре в мрежата.
Така че трябва да можете да промените spring.data.mongodb.uri=mongodb://localhost:27017/db
до spring.data.mongodb.uri=mongodb://mongo:27017/db
и това трябва да му позволи да се свърже.