Problema
Você está tentando acessar o banco de dados com IP/nome de host incorreto. Como você pode ver, acessando
localhost
no contêiner de primavera resolveria para esse contêiner e não há 27017
porta escutando lá. Quando você executa o jar no host do docker, ele tem 27017
porta disponível, é por isso que funciona.
Solução
Você pode usar
--hostname
sinalizar em docker run
comando para definir o nome do host do contêiner de banco de dados para que você possa se conectar a ele a partir do contêiner Spring usando o nome do host. A melhor solução, no entanto, é usar um arquivo docker-compose e iniciar os contêineres usando
docker-compose up
. Em primeiro lugar, use
MongoClient mongo = new MongoClient("db", 27017));
em seu código Spring e construa uma imagem do seu código.
Depois, siga as etapas abaixo para iniciar os contêineres:
A) Criar arquivo de composição
Crie um arquivo chamado
docker-compose.yml
com o seguinte conteúdo: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) Execute o arquivo de composição
Execute o seguinte comando para executar o arquivo de composição:
docker-compose up -d