2
respostas

[Dúvida] Conectar aplicação ao container do banco de dados

Estou utilizando um container com PostgreSQL para salvar meus dados, porém minha aplicação não está conseguindo se conectar a esse container. O erro que estou recebendo é

SQL State  : 08001
Error Code : 0
Message    : A tentativa de conexão falhou.

O application.yaml e o Dockerfile da aplicação podem ser visualizados a seguir

application.yaml

spring:
  datasource:
    driver-class-name: org.postgresql.Driver
    url: jdbc:postgresql://localhost:32771/kofood-pedidos
    username: postgres
    password: root


  jpa:
    show-sql: on
    properties:
      hibernate:
        format_sql: true


  flyway:
    driver-class-name: org.postgresql.Driver
    user: postgres
    password: root
    url: jdbc:postgresql://postgres:32771/kofood-pedidos

  application:
    name: pedidos-ms

Dockerfile

FROM eclipse-temurin:17-jdk-alpine

RUN addgroup -S spring && adduser -S spring -G spring
USER spring:spring

COPY /build/libs/*.jar pedidos-ms.jar

EXPOSE 8080

ENTRYPOINT ["java", "-jar", "/pedidos-ms.jar"]

Alguém sabe informar como solucionar esse erro?

Agradeço a atenção

2 respostas

Olá, Otávio

No seu arquivo application.yaml, você definiu o seguinte URL para o banco de dados: jdbc:postgresql://localhost:32771/kofood-pedidos. Se o seu banco de dados está rodando dentro de um container Docker, a palavra "localhost" pode não se referir ao mesmo host que a sua aplicação está tentando acessar. Isso porque cada container Docker tem seu próprio "localhost".

Uma possível solução para isso seria substituir "localhost" pelo nome do serviço do banco de dados que você definiu no Docker. Por exemplo, se você definiu seu serviço de banco de dados como "db" no Docker, a URL ficaria assim: jdbc:postgresql://db:32771/kofood-pedidos.

Outra possibilidade é que a porta do banco de dados esteja incorreta. A porta padrão do PostgreSQL é a 5432. A menos que você tenha alterado isso, a porta deveria ser 5432.

Além disso, é importante verificar se as credenciais (usuário e senha) estão corretas. No seu arquivo application.yaml, você definiu o usuário como "postgres" e a senha como "root". Certifique-se de que essas são as credenciais corretas para o seu banco de dados.

Por fim, verifique se o driver do PostgreSQL está corretamente configurado e disponível para a sua aplicação. No seu arquivo application.yaml, você definiu o driver como "org.postgresql.Driver". Certifique-se de que essa classe está disponível no classpath da sua aplicação.

Espero que essas sugestões possam te ajudar a resolver o problema. Lembre-se de que é sempre uma boa ideia verificar as configurações do banco de dados e assegurar que tudo está configurado corretamente. Espero ter ajudado e bons estudos!

Olá, Otávio!

Segue as configurações do banco

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Então, eu alterei a URL do banco para jdbc:postgresql://postgres:32771/kofood-pedidos, mas ainda continuo recebendo o mesmo erro. O estranho é que pelo pgAdmin e pelo IntelliJ, eu uso o "localhost" e conecta normalmente. Porém, quando rodo a aplicação (mesmo antes de colocar dentro do container), recebo o mesmo erro ao buildar a imagem. Testei alterar a porta, mas não obtive sucesso

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software