Problem
Próbujesz uzyskać dostęp do bazy danych z niewłaściwym adresem IP/nazwą hosta. Jak widać, dostęp do localhost
w wiosennym kontenerze rozwiązałoby się do tego kontenera i nie ma 27017
port tam nasłuchuje. Kiedy uruchamiasz jar na hoście dockera, ma on 27017
dostępny port, dlatego działa.
Rozwiązanie
Możesz użyć --hostname
flaga w docker run
polecenie, aby ustawić nazwę hosta kontenera DB, aby można było połączyć się z nim z kontenera Spring przy użyciu nazwy hosta.
Jednak lepszym rozwiązaniem jest użycie pliku docker-compose i uruchomienie kontenerów za pomocą docker-compose up
.
Przede wszystkim użyj
MongoClient mongo = new MongoClient("db", 27017));
w kodzie Springa i zbuduj obraz swojego kodu.
Następnie wykonaj poniższe czynności, aby uruchomić kontenery:
A) Utwórz plik do tworzenia
Utwórz plik o nazwie docker-compose.yml
z następującą treścią:
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) Uruchom plik do tworzenia
Wykonaj następujące polecenie, aby uruchomić plik tworzenia:docker-compose up -d