Проблема
Вы пытаетесь получить доступ к БД с неправильным IP / именем хоста.Как вы можете видеть, доступ к localhost
в контейнере пружины разрешил бы этот контейнер, и там нет порта для прослушивания 27017
.Когда вы запускаете jar на хосте докера, у него есть доступный порт 27017
, поэтому он работает.
Решение
Вы можете использовать флаг --hostname
в команде docker run
, чтобы задать имя хоста контейнера БД, чтобы вы могли подключиться к нему из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) Запустить файл Compose
Выполнить следующую командучтобы запустить файл композиции: docker-compose up -d