Problém
Pokoušíte se přistupovat do DB s nesprávnou IP/hostname. Jak můžete vidět, přístup k localhost
v jarním kontejneru by se převedl na tento kontejner a není tam žádný 27017
port tam poslouchá. Když spustíte jar na hostiteli dockeru, má 27017
port k dispozici, proto to funguje.
Řešení
Můžete použít --hostname
příznak v docker run
příkaz k nastavení názvu hostitele kontejneru DB, abyste se k němu mohli připojit z kontejneru Spring pomocí názvu hostitele.
Lepším řešením je však použít soubor docker-compose a spustit kontejnery pomocí docker-compose up
.
Nejprve použijte
MongoClient mongo = new MongoClient("db", 27017));
ve vašem kódu Spring a vytvořte si obrázek svého kódu.
Poté spusťte kontejnery podle následujících kroků:
A) Vytvořte nový soubor
Vytvořte soubor s názvem docker-compose.yml
s následujícím obsahem:
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) Spusťte nový soubor
Spusťte následující příkaz a spusťte soubor pro vytvoření nového souboru:docker-compose up -d